因为我真的不明白$ 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>';
}
答案 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)
循环如下:
似乎令牌过期或用户取消授权应用程序的时间与oauth脚本实际接收更改的时间之间存在延迟。
Bug可能吗?