你应该如何处理刚刚登录Facebook的人?来到你的网站你应该给他们一个继续链接(因为你发现他们已经登录到Facebook),然后在你指导他们的页面上得到这个错误。
Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in /var/www/html/lib/base_facebook.php on line 1039
我不明白你应该如何防止这种情况?这是否与您提交给Facebook以获取access_token的签名信息有关?好像这个签名信息可以过期(它有一个issued_at日期)。在您的网站流程中处理此问题的正确方法是什么?
您是否应该编写如下代码:
<?php
$user = $facebook->getUser();
try {
// attempt to do a call just to see if you are going to have this issue
$profile = $facebook->api('/me');
} catch (Exception $e) {
$user = false;
}
if ($user) { ?>
<a href="start.php">Begin</a>
<?php } else { ?>
<fb:login-button scope="email" size="large">Connect</fb:login-button>
<?php } ?>
而不是:
<?php
$user = $facebook->getUser();
if ($user) { ?>
<a href="start.php">Begin</a>
<?php } else { ?>
<fb:login-button scope="email" size="large">Connect</fb:login-button>
<?php } ?>
从Facebook SDK中取回$ user似乎只是告诉你有一个cookie。而不是当你去做API调用时它会真正起作用。
更新: 所以这个方法的唯一问题是......当用户确实在我的网站上有cookie但API调用失败时 - 我向他们展示了连接按钮。用户单击连接按钮,它会快速显示并消失。因为它不是真正发生的'auth.login',所以用户不会通过JavaScript重定向发送到我的start.php页面。别人怎么处理这个?我很难过。请告诉我是否还有其他缺陷,我试图这样做。
答案 0 :(得分:1)
尝试将访问令牌传递给API调用,以验证用户是否已授权您的应用程序。以下是我的工作,它应该有助于减轻您获得的OAuthException。
$user = $facebook->getUser();
if($user) {
$access_token = $facebook->getAccessToken();
$params = array('access_token' => $access_token);
try {
$me = $facebook->api("/me", $params);
} catch(FacebookApiException $e) {
$user = null;
}
}
if($me) {
// proceed with authenticated user with an active access token.
}
答案 1 :(得分:0)
您是否应该编写如下代码:
是的,您必须处理OAuthException
。
但是,您可以将用户重定向到您的应用程序的Facebook登录URL,而不是使用FBML登录按钮。您可以使用Facebook PHP SDK提供的函数getLoginUrl
获取网址。有关详细信息,请参阅getLoginUrl。
对于您的电子邮件权限,您可以使用以下数组:
$params = array( 'scope' => 'email' );
成功登录后,用户将被重定向回应用程序页面,并将其重定向到facebook登录。