我有一个 Facebook 连接/断开链接。当用户点击“Facebook connect”链接(在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);-)
任何帮助将不胜感激!谢谢 !
索引.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>
连接.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);
?>