这让我发疯了> =(
$ facebook-> getUser()有时运行良好,但有时返回0
这是我的代码:
require 'fbapi/facebook.php';
$facebook = new Facebook(array(
'appId' => 'xxx',
'secret' => 'xxxxx',
));
$user = $facebook->getUser();
appId 和秘密是正确的。
这可能是getUser有时会返回0 ???
的原因答案 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(),最后它工作了..:)