【问题标题】:PHP SDK 3.1.1 getUser() sometimes return 0PHP SDK 3.1.1 getUser() 有时返回 0
【发布时间】:2011-08-29 06:32:14
【问题描述】:

这快把我逼疯了>=(

$facebook->getUser() 有时效果很好,但有时返回 0

这是我的代码: require 'fbapi/facebook.php';
$facebook = new Facebook(array(
'appId' => 'xxx',
'secret' => 'xxxxx',
));
$user = $facebook->getUser();

appIdsecret 是正确的。

这可能是 getUser 有时返回 0 的原因???

【问题讨论】:

  • 这个话题能帮你解决问题吗? :Why is Facebook PHP SDK getUser always returning 0?
  • @Janis 它应该与 JS SDK 没有任何关系。他在这里没有做任何需要它的事情。
  • 您在使用 Safari 吗?您是否将 JS SDK 与 PHP SDK 结合使用?
  • +1 @Mike,人们报告说,当使用 PHP-SDK 和 JS-SDK 时,cookie 不会在第一次重新加载时设置。您需要再次重新加载才能设置 $user(我在 FF 上确认了这个问题)

标签: php facebook-graph-api facebook-php-sdk facebook-iframe facebook-authentication


【解决方案1】:

这很可能是 Facebook 端的事情(开发人员在不久前已经经历过这个)。如果$user 返回 null 或 0,只需将它们重新路由到登录 url(你应该有)。它再次返回 0 的可能性很小(除非它们的末尾有错误,或者您的代码比您发布的内容更多)。

【讨论】:

  • 感谢飞利浦,但如果我这样做,页面会无限循环... :( 这是重新加载和循环的代码.. ` if ($user) { try { $user_profile = $facebook- >api('/me');
    } catch (FacebookApiException $e) {
    echo '
    '.htmlspecialchars(print_r($e, true)).'
    '; } } else{ $log = $facebook->getLoginUrl(array('canvas' => 1,'fbconnect' => 0)); echo("
  • @Phoxer 你确定你使用的是最新的 PHP SDK 吗?
  • @Phoxer 可能是您的应用程序设置?您升级到 OAuth 2.0 了吗?
  • 是的@philips,我升级到 OAuth 2.0,并使用今天下载的最新 PHP SDK。
    有时 getUser 工作正常,有时返回 0.. =/ 我不知道,因为我没有更改任何代码行..
  • @Phoxer 如果它偶尔有效,它让我相信它是 Facebook 端的间歇性问题。这发生在较旧的 PHP SDK(3.0 之前)中,它有时会返回 0。
【解决方案2】:

我遇到了类似的问题。 $facebook->getUser() 返回 0,有时它在用户未实际登录时返回有效的用户 ID,当我尝试进行图形 api 调用时导致致命的 Oauth 错误。我终于解决了这个问题。我不知道这是否是正确的方法,但它有效。这是代码:

<?php
include 'includes/php/facebook.php';
$app_id = "APP_ID";
$app_secret = "SECRET_KEY";
$facebook = new Facebook(array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'cookie' => true
));

$user = $facebook->getUser();

if ($user <> '0' && $user <> '') { /*if valid user id i.e. neither 0 nor blank nor null*/
try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) { /*sometimes it shows user id even if user in not logged in and it results in Oauth exception. In this case we will set it back to 0.*/
error_log($e);
$user = '0';
}
}
if ($user <> '0' && $user <> '') { /*So now we will have a valid user id with a valid oauth access token and so the code will work fine.*/
echo "UserId : " . $user;

$params = array( 'next' => 'http://www.quickbite.co.in' );
echo "<p><a href='". $facebook->getLogoutUrl($params) . "'>Logout</a>";

$user_profile = $facebook->api('/me');
echo "<p>Name : " . $user_profile['name'];
echo "<p>";
print_r($user_profile);

} else {/*If user id isn't present just redirect it to login url*/
header("Location:{$facebook->getLoginUrl(array('req_perms' => 'email,offline_access'))}");
}

?>

【讨论】:

    【解决方案3】:

    你只需输入php头文件

    header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');
    

    【讨论】:

      【解决方案4】:

      我找到了解决这个问题的简单方法.. 当 facebook 类无法在您的服务器上设置或添加会话变量时会发生这种情况..

      在我的代码中,我在包含 facebook 类之前使用了 session_write_close(),因此我收到了这个错误。“CSRF 状态令牌与提供的不匹配。”..

      然后我将 session_write_close() 移到了代码的末尾,终于成功了.. :)

      【讨论】:

        【解决方案5】:

        所以我一直在努力解决同样的问题,getUser() 总是返回 0。根本没有任何意义。 NginX 错误日志显示以下错误“CSRF 状态令牌与提供的令牌不匹配”。然后我开始调试 sdk 并将其范围缩小到 getAccessTokenFromCode() 无法从 Facebook 服务器获取正确的访问令牌,这与 SSL 证书有关。

        下面提到的链接中的解决方案为我解决了这个问题。

        https://github.com/facebook/php-sdk/issues/272

        您可能还需要将与 sdk 捆绑在一起的“fb_ca_chain_bundle.crt”文件复制到您的 facebook 类文件所在的文件夹中。我做到了。

        我希望这是有道理的。

        【讨论】:

        • 你还记得那个问题是什么吗?它已经从 github 上移除了......
        • fb_ca_chain_bundle.crt 已经存在,但我又遇到了困难,但在 facebook 回调后获取用户。
        猜你喜欢
        • 2013-02-16
        • 1970-01-01
        • 2012-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-04
        • 2011-10-11
        • 2013-03-19
        相关资源
        最近更新 更多