我有一个问题,PHP Facebook的SDK。 我已经阅读了许多文章谈论同样的问题(访问令牌无效,重定向循环等),但没有人可以帮助。Facebook的OpenGraph与Yii框架 - 身份验证问题
简单地说,我的项目是如何设计:
它是指仅与登录Facebook的用户运行一个Facebook应用程序。 使用Yii Framework,我创建了一个过滤器,每次加载页面时都会调用该过滤器,以确保只有通过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,但无论如何,我需要使用过滤器,因为我想确保这仍然是相同的用户(或因此如果用户已更改)。
唯一可行的是将用户重定向到没有Filter的页面(没有调用API(“/ me”))。然后,用手点击应用程序中的新链接,然后找到访问令牌。这不是我想要的行为。
我真的很希望有人能帮助我!
在此先感谢。
你到目前为止发现了什么问题。我遇到了同样的问题 –