Facebook auth.login和cookie无效

时间:2012-01-20 04:16:48

标签: facebook cookies oauth

我的网站上有一个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。

1 个答案:

答案 0 :(得分:0)

在您的FB.init中

,尝试添加oauth:true

FB.init({appId: '<?= FACEBOOK_APP_ID ?>', status: true, cookie: true, xfbml: true, oauth:true});