Facebook の接続/切断リンクがあります。ユーザーが「Facebook 接続」リンク ( index.php ) をクリックすると、ユーザーの状態がチェックされ (Facebook に接続されているかどうか)、接続されていない場合、スクリプトは Ajax $.post 要求をconnect.phpに送信します。データベースから情報を取得するため (例: ユーザーはデータベースに登録されていますか?)。その後、 index.php に応答を返します。エラーがなければ、ページが更新されます。この場合、すべて問題がなければ、スクリプト ( window.location.reload(); ) によってページが更新された後、Facebook ユーザー ID (UID) が表示されます。
問題は、ページが ajax コールバックを介してリロードされた後も UID がまだ空であることです。しかし、ページをもう一度手動で更新すると、UID が表示されるようになります。
問題の原因を理解するためにさまざまな方法をテストしましたが、次の Facebook リクエストに問題があることがわかりました。$me = $facebook->api('/me');
とにかく、私は$me = $facebook->api('/me');なしではやっていけません。私のスクリプトをテストして問題を見つけたい場合は、ここに必要なものがあります。(最後の Facebook SDK を忘れないでください) ;-)
どんな助けでも大歓迎です!ありがとう !
index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Facebook Connect</title>
<script src="js/jquery.js"></script>
<?php
/* FACEBOOK APP CONFIGURATION */
$appId = 'YOU_APP_ID';
$appSecret = 'YOUR_APP_SECRET';
define("APPID",$appId);
define("APPSECRET",$appSecret);
/* API CALL */
if (!class_exists('FacebookApiException'))
{
require_once('inc/facebook.php' );
}
$facebook = new Facebook(array(
'appId' => APPID,
'secret' => APPSECRET,
));
$fb_user = $facebook->getUser();
if ($fb_user) {
try
{
$me = $facebook->api('/me');
$uid = $facebook->getUser();
}
catch (FacebookApiException $e)
{
//echo error_log($e);
$fb_user = null;
}
}
?>
</head>
<body>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/fr_FR/all.js#xfbml=1&appId=<?=APPID?>";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId : '<?=APPID?>',
oauth : true,
status : true,
cookie : true,
xfbml : true
});
};
function fb_connect() {
alert('FB.getLoginStatus');
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
var access_token = response.authResponse.accessToken;
var user_id = response.authResponse.userID;
//
window.location.reload();
//
} else {
alert('FB.login');
FB.login(function(response) {
var access_token = response.authResponse.accessToken;
var user_id = response.authResponse.userID;
$.post('connect.php', function(data) {
var obj = $.parseJSON(data);
if (obj['error']==0) {
alert(obj['message']);
window.location.reload();
} else {
alert(obj['message']);
}
});
//
}, {
scope: 'email, publish_stream, user_birthday'
});
}
});
}
function fb_logout() {
FB.logout(function(response) {
window.location.reload();
});
}
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/fr_FR/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
<p>UID : <?=$fb_user?></p>
<?php if ($fb_user) { ?>
<a href="#" onclick="fb_logout();">Disconnect</a>
<?php } else { ?>
<a href="#" onclick="fb_connect();">Facebook connect</a>
<?php } ?>
</body>
</html>
connect.php
<?php
/* FACEBOOK APP CONFIGURATION */
$appId = 'YOUR_APP_ID';
$appSecret = 'YOUR_APP_SECRET';
define("APPID",$appId);
define("APPSECRET",$appSecret);
/* API CALL */
if (!class_exists('FacebookApiException'))
{
require_once('inc/facebook.php' );
}
$facebook = new Facebook(array(
'appId' => APPID,
'secret' => APPSECRET,
));
$fb_user = $facebook->getUser();
if ($fb_user) {
try
{
$me = $facebook->api('/me');
$uid = $facebook->getUser();
}
catch (FacebookApiException $e)
{
//echo error_log($e);
$fb_user = null;
}
}
/* CALLBACK */
$result = array();
if ($fb_user) {
$result['error'] = 0;
$result['message'] = $me['first_name'];;
} else {
$result['error'] = 1;
$result['message'] = 'error';
}
echo json_encode($result);
?>