【问题标题】:Facebook OpenGraph with Yii Framework - Authentication Issue带有 Yii 框架的 Facebook OpenGraph - 身份验证问题
【发布时间】: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


【解决方案1】:

在您进行新的登录尝试后,您应该会在重定向到的 URL 中获得一个新代码。因此,查找该代码参数,如果存在,则将其换成新的访问令牌。

【讨论】:

  • 您知道使用 SDK 的方法吗?通常方法 getUser() 应该做所有这些,但没有办法,使用 getUser(),即使我已注销,我也会得到 FB id...我也尝试清理会话/cookie,做调用 getUser(),以确保将请求新的 access_token,但不能!对 api('/me') 的调用仍然告诉我没有活动令牌。
【解决方案2】:

也可以查看yiiauth 扩展名。它是今天刚刚发布的,您可以使用它登录 29 个不同的提供商:Facebook、OpenID、Google、Twitter、Yahoo 等。

它使用HybridAuth 库和AFAICT,它使身份验证变得非常容易。

【讨论】:

  • 谢谢 Ors。我想做的是隐式身份验证。我不希望人们点击登录按钮或其他东西。如果他们登录 FB,我只想让他们自动登录我的应用程序。我认为 yiiauth 不可能做到这一点。
猜你喜欢
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多