我的网站上有一个Facebook“登录按钮”,用于获取用户信息。它一直在努力,直到最近Facebook改变了局面。它用于在用户点击“登录”时刷新页面,然后我可以使用cookie访问他们的所有信息。
登录按钮代码(HTML):
<fb:login-button perms="email" oauth="true" style="float:left;"></fb:login-button>
使用Cookie(PHP)获取用户信息:
$user = json_decode(file_get_contents('https://graph.facebook.com/me?access_token=' . $cookie['access_token']));
此代码位于我的页面底部:
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({appId: '<?= FACEBOOK_APP_ID ?>', status: true,
cookie: true, xfbml: true});
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
</script>
我有这个PHP函数用于获取cookie:
function get_facebook_cookie($app_id, $application_secret) {
$args = array();
parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
ksort($args);
$payload = '';
foreach ($args as $key => $value) {
if ($key != 'sig') {
$payload .= $key . '=' . $value;
}
}
if (md5($payload . $application_secret) != $args['sig']) {
return null;
}
return $args;
}
global $cookie;
$cookie = get_facebook_cookie(FACEBOOK_APP_ID, FACEBOOK_SECRET);
现在看来auth.login不会触发。当用户点击“登录”按钮时,会显示弹出窗口。但是在用户允许应用程序之后,弹出窗口关闭,没有其他任何事情发生。之前,它会重新加载当前页面。这是(或曾经)由auth.login触发的,这使我相信该部分被破坏了。但是,我尝试用auth.statusChange替换auth.login,这只会导致页面一次又一次地刷新,因为每次加载页面时都会调用它。在一天结束时,似乎我的cookie不再被创建。我已经做了很多挖掘,看看是否有其他人有这个问题,但找不到任何有用的东西。
我认为主要问题是没有创建/填充cookie。
答案 0 :(得分:0)
,尝试添加oauth:true
FB.init({appId: '<?= FACEBOOK_APP_ID ?>', status: true, cookie: true, xfbml: true, oauth:true});