【发布时间】:2012-06-11 18:46:09
【问题描述】:
我遇到了 php Facebook sdk 的问题。 我已经阅读了很多关于相同类型问题(访问令牌无效、重定向循环等)的帖子,但没有任何帮助。
简而言之,我的项目是如何设计的:
这是一个 Facebook 应用程序,只能在登录 Facebook 的用户的情况下运行。 使用 Yii 框架,我创建了一个过滤器,每次加载页面时都会调用它,以确保内容仅对 Facebook 登录用户可见。 它的行为应该与 Facebook 上的应用程序 BranchOut 完全相同。
我的问题,以及如何重现它:
- 我使用来自 Facebook 的典型登录过程(OAuth、访问令牌)登录到我的应用程序
- 我在 Facebook 页面上手动注销,然后尝试在我的应用程序上执行新操作
- 过滤器检查我是否登录 Facebook,因为我没有登录,所以它会将我重定向到 Facebook 登录页面。
- 再次登录 Facebook 后,我在 Facebook 和我的应用程序的过滤器之间看到了典型的无限循环。
这是我的过滤器的代码:
$fb_logged = false;
try
{
$user = Yii::app()->facebook->getUser();
$me = Yii::app()->facebook->api('/me');
$fb_id = $me['id'];
$fb_logged = true;
}
catch (Exception $e)
{
$fb_logged = false;
}
if($fb_logged)
{
print_r($fb_id. ' has logged');
/* Check if user exists on MyApp
... */
}
// If user NOT logged on FB, send him to the FB login page
else
{
$loginUrl = Yii::app()->facebook->getLoginUrl(array(
'redirect_uri' => Yii::app()->getRequest()->getUrl() // I have tried many things here.
));
echo("<script> top.location.href='" . $loginUrl . "'</script>");
Yii::app()->end();
}
实际发生的情况是,在 FB 上登录后,再次调用过滤器,因为向相同的 URL 发出请求。此时,调用 api('/me') 会产生异常,因为它找不到任何有效的访问令牌,并开始在其上循环。
我可以补充说我的配置是好的(或者看起来是好的),我已经根据 Facebook 的应用设置检查了我所有的网址和域名。 我也尝试了很多事情,比如重定向到一个新的特定 URL,但无论如何我也需要使用过滤器,因为我想确保这仍然是同一个用户(或者如果用户发生变化,则采取相应的行动)。
唯一有效的方法是将用户重定向到没有过滤器的页面(没有调用 api("/me"))。然后,手动单击应用程序中的新链接,并在那里找到访问令牌。这不是我想要的行为。
我真的希望有人可以帮助我!
提前致谢。
【问题讨论】:
-
到目前为止,您是否发现了问题所在。我遇到了同样的问题
标签: php facebook yii infinite-loop access-token