所以Facebook已经改变了身份验证过程。再次。 PHP SDK中的示例是:
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
但是,现在我们如何验证尚未经过身份验证的用户?我们只是创建一个else
语句并调用$facebook->getLoginUrl()
的结果吗?
此外,上面的示例给出了一个错误,因为对$facebook->getUser()
的调用会返回我的用户ID,但是当我尝试拨打$facebook->api('/me')
时出现错误,我的应用就会失败:
致命错误:未捕获OAuthException:必须使用活动访问令牌来查询有关当前用户的信息。在 /home/woohoobi/public_html/facebookv2/inc/facebook.php 投放 560
有关如何验证未经身份验证的用户的任何帮助都会很棒。
答案 0 :(得分:5)
当你这样做时
$user = $facebook->getUser();
使$user
不为空并不意味着您有一个有效的访问令牌来进行一些API调用。它只是意味着用户已登录。
要检查您是否拥有有效的访问令牌,一种方法是尝试进行API调用,就像您在问题中所写的代码一样:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$user = $facebook->getUser();
if ($user) {
// The user is logged in
try {
$user_profile = $facebook->api('/me');
// Here : API call succeeded, you have a valid access token
} catch (FacebookApiException $e) {
// Here : API call failed, you don't have a valid access token
// you have to send him to $facebook->getLoginUrl()
$user = null;
}
} // else : the user is not logged in
因此,您有2个案例需要将您的用户发送到$facebook->getLoginUrl()
,在这两种情况下,我们都会$user == null
。所以我们只需添加:
<?php if ($user): ?>
<a href="<?php echo $facebook->getLogoutUrl() ?>">Logout of Facebook</a>
<?php else: ?>
<a href="<?php echo $facebook->getLoginUrl() ?>">Login with Facebook</a>
<?php endif ?>
对于完整的流程,您可以看到the example of the Facebook PHP SDK,其中有详细记录。
希望有所帮助。
答案 1 :(得分:2)
这帮了我很多!所以..用户只需要先接受你的应用程序即可使用userdata。
<body>
<?php
if (!$user_id)
echo("<script> top.location.href='" . $facebook->getLoginUrl() . "'</script>");
?>
答案 2 :(得分:1)
我遇到了同样的问题,getUser()调用返回0.有一天它正在工作,下一个它没有。我没有意识到PHP SDK旨在与JS SDK一起使用。您应该按照以下说明操作:https://developers.facebook.com/docs/reference/javascript/ - 在之后包含配置,您应该进行排序。