【问题标题】:Redirect::to() clears Facebook access tokenRedirect::to() 清除 Facebook 访问令牌
【发布时间】:2013-04-06 10:03:24
【问题描述】:

我正在使用 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();
}

【问题讨论】:

  • Laravel 肯定不使用 $_SESSION 全局变量吗?据我所知,Symfony(Laravel 的核心组件)会清空变量,并将所有内容存储在 Session 助手中?因此,您会改用Session::get() 吗?
  • 是的,这是我的旧代码,我已经将其更改为使用 Session 类。但 $_SESSION 实际上工作得很好。但这不是我的意思,因为这种将访问令牌存储在会话中的解决方案会产生用户无法注销的问题。

标签: php facebook facebook-php-sdk laravel


【解决方案1】:

如果应用位于 iframe 内(例如 Facebook Canvas 应用或 Page Tab 应用),则您需要设置 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

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 2012-06-02
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 2014-02-27
    相关资源
    最近更新 更多