Redirect :: to()清除Facebook访问令牌

时间:2013-04-06 10:03:25

标签: php facebook facebook-php-sdk laravel

我正在使用laravel构建一个Facebook应用程序,我在我的代码中使用Redirect::to('thank_you'),在用户提交表单后将用户重定向到感谢页面。

function submitForm() {
    //Process input
    //Done, now redirect to thank you page
    Redirect::to('thank_you')
}

然而,在'thank_you'中,Facebook访问令牌消失了。因此,当我需要运行$facebook->api('/me')时,它会抛出一个异常,说明需要一个有效的访问令牌。

这让我发疯了!你有什么建议吗?

(我目前正在$ _SESSION ['user_token']中存储访问令牌。但是当用户注销时,这仍然有效,因此用户无法在应用程序中注销他的FB帐户。不希望网站上有任何退出按钮

//Fix for invalid access tokens
if(!isset($_REQUEST['code']) && isset($_SESSION['accessToken'])) {
    $this->facebook->setAccessToken($_SESSION['accessToken']);
} 
//if the user has just done facebook login & auth
else if(isset($_REQUEST['code'])) {
    $_SESSION['accessToken'] = $this->facebook->getAccessToken();
}

1 个答案:

答案 0 :(得分:0)

如果应用程序位于iframe内(例如Facebook Canvas App或Page Tab App),则需要设置一个P3P标题,告知浏览器允许您从iframe中访问Cookie。

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');

如果您不这样做,会话cookie不会传递到您的应用程序,这将导致您被注销。

(仅当您在iframe内时才有意义)

编辑:这是关于p3p标题Cookie blocked/not saved in IFRAME in Internet Explorer

的详细解释