PHP SDK 3.1.1 getUser()有时会返回0

时间:2011-08-29 06:32:14

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

这让我发疯了> =(

$ facebook-> getUser()有时运行良好,但有时返回0

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

appId 秘密是正确的。

这可能是getUser有时会返回0 ???

的原因

5 个答案:

答案 0 :(得分:1)

这很可能是Facebook的结果(开发人员在一段时间之前已经完成了这个)。如果$user返回null或0,只需将它们重新路由到登录URL(您应该拥有)。它再次返回0的可能性很小(除非他们的结尾有一个错误,或者你的代码比你发布的更多)。

答案 1 :(得分:1)

我遇到了类似的问题。 $ facebook-> getUser()返回0,有时当用户未实际登录时返回有效的用户ID,当我尝试进行图形api调用时导致Fatal 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'))}");
}

?>

答案 2 :(得分:1)

你只需输入php标题

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

答案 3 :(得分:0)

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

以下提到的链接的解决方案为我解决了问题。

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

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

我希望这是有道理的。

答案 4 :(得分:0)

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

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

然后我在代码的末尾移动了session_write_close(),最后它工作了..:)