【发布时间】:2012-01-27 00:46:44
【问题描述】:
您应该如何与不久前登录 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 的签名信息有关吗?似乎这个签名信息可能会过期(它有一个 issue_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 页面。其他人如何处理这个问题?我难住了。请告诉我我在尝试这样做时是否还有其他缺陷。
【问题讨论】:
-
您是否检查过两个站点上的域名、app_id 和 app_secret 是否相同(您检查 fb 用户存在的站点和您重定向的站点)?并且用于在第一个站点上初始化 facebook 对象的域应该是一个更高级别的域然后在下一个站点上。
-
这都在同一个站点上。成功登录后,我想将我的用户从 /(或 index.php)重定向到 start.php
标签: facebook facebook-php-sdk oauth-2.0