Facebook:登录后重定向,用户会话为空?

时间:2013-05-09 10:58:08

标签: php javascript facebook api

我正在尝试在iframe应用程序中请求某些权限的同时对用户进行身份验证(登录)。

我将JS SDK与PHP SDK结合使用。所以,首先我检查用户是否已登录并且使用PHP $facebook->getUser()一切正常,当失败时我将用户重定向到运行此JS的页面:

FB.getLoginStatus(function(response) {
    if (response.status === "connected") {
        // Ok, go home
    } else {
        FB.login(function(response) {
            if (response.authResponse) {
                // Ok, go home
            } else {
                // Cancelled, go home
            }
        }, {scope: '<?php echo implode(',', $this->permissions); ?>'});
    }
});

然后,这将创建一个请求权限的登录对话框。正如您所看到的,有些情况下用户已正确验证/授权以及何时取消对话框。在任何一种情况下,我都需要做一件事:重定向回我的应用程序的根目录。

因此,弹出对话框,用户登录,然后将其重定向回家,我将PHP用于getUser()

这里的问题是,用户第一次登录并重定向时,getUser()始终为空,没有用户会话。如果我刷新持有我的应用程序的iframe的facebook页面,那么会话和权限被正确设置,表明对话框已完成它的工作。

为什么第一次重定向不起作用的任何想法?

我发现了类似的问题,但非为我提供了一个具体的,有效的解决方案。

1 个答案:

答案 0 :(得分:0)

如果其他人有同样的问题,这就是我所学到的:

  1. Facebook声称在用JS设置之后向PHP提供会话cookie,但事实并非如此,至少在任何时候都不是这样!
  2. 对此的唯一解决方案(至少是我能想到的唯一解决方案)是每当您使用JS登录到后端(PHP)时手动传递访问令牌。将其存储在那里的会话中,并且只要avaialable使用它而不是Facebook API尝试使用的访问令牌。只需致电$api->setAccessToken($yourNewToken);
  3. 即可
  4. 您可以继续进行测试,看看令牌何时可用,但对我来说,它通常在第二次api通话后可用。