Facebook PHP SDK:api('/ me')奇怪的行为

时间:2012-01-18 14:27:37

标签: php facebook facebook-php-sdk

因为我真的不明白$ user = $ facebook-> getUser(); function(即使用户登录也会返回NULL)我正在尝试使用此代码。问题是,它提供了“必须使用活动访问令牌来查询有关当前用户的信息”。 OAuthException,如果我将登录重定向代码也放在Catch部分,它会进入无限重定向循环...有人可以帮助我吗?

谢谢! :)

try {
    $user_profile = $facebook->api('/me');
    $scope = 'publish_stream,user_photos';

    $scope_params = explode(',',$scope);

    $permissions = $facebook->api("/me/permissions");

if( array_key_exists('publish_stream', $permissions['data'][0]) && array_key_exists('user_photos', $permissions['data'][0])) {
  // facebook logic
 }else {
    ?>
    <!doctype html>
        <html xmlns:fb="http://www.facebook.com/2008/fbml">
        <head>
        <title>Redirect</title>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 

        <script language=javascript>window.open('<?php echo $loginUrl ?>', '_parent', '')</script>
        </head>
        <body>
        Redirecting...
        </body>
    </html>

        <?php
    exit;   
      }

}catch (FacebookApiException $e) {
     echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
}

3 个答案:

答案 0 :(得分:0)

您需要将活动访问令牌传递给Graph API。每个访问令牌都有到期时间,在它通过后,您需要重新进行身份验证。您应该在Facebook的PHP SDK($facebook->getAccessToken();)中检查是否存在访问令牌。如果它不存在 - 尝试重新验证自己。如果id无效,请尝试使用另一个新鲜的facebook应用程序。此处描述了整个身份验证:http://developers.facebook.com/docs/authentication/

在上面的链接中很好地描述了在不使用PHP SDK令牌的情况下手动获取访问权限。

答案 1 :(得分:0)

解决方案是将所有代码放入一个index.php文件

答案 2 :(得分:0)

循环如下:

  1. 调用API
  2. API表示令牌已过期/无效
  3. GetLoginUrl() - &gt;重定向
  4. 一旦重定向到oauth页面,它认为权限和令牌仍然有效;所以它重定向回你的应用程序
  5. 发生循环(返回步骤1)
  6. 似乎令牌过期或用户取消授权应用程序的时间与oauth脚本实际接收更改的时间之间存在延迟。

    Bug可能吗?