facebook - Facebook 登录与 CSRF 状态 token 不匹配的问题

标签 facebook .htaccess facebook-php-sdk

我进行了一些搜索,但没有找到与我的问题相关的任何内容。

我目前正尝试在我的网站上实现 Facebook 登录,但由于 htaccess mod 重写 URL,我在登录身份验证方面遇到了问题?

代码运行完美,如果我在没有 mod 重写规则的情况下使用它,我会登录:

domain.com/view_webhosting.php?webhosting=name

但是一旦我转到 mod 重写 URL

domain.com/webhosting-name/

然后它就不起作用并抛出错误“CSRF 状态 token 与提供的 token 不匹配。”

在 htaccess 文件中它看起来像这样

RewriteRule ^webhosting-([a-z_0-9-]+)/$ /view_webhosting.php?webhosting=$1 [L]

谁有办法解决这样的问题?我正在使用 Facebook SDK v3.1.1

最佳答案

PHP SDK 期望“状态”字段在重定向之后位于 $_REQUEST(我相信是 GET 参数)中,然后您才能将“代码”交换为访问 token 。来自 base_facebook.php:

protected function getCode() {
  if (isset($_REQUEST['code'])) {
    if ($this->state !== null &&
      isset($_REQUEST['state']) &&
      $this->state === $_REQUEST['state']) {

      // CSRF state has done its job, so clear it
      $this->state = null;
      $this->clearPersistentData('state');
      return $_REQUEST['code'];
    } else {
      self::errorLog('CSRF state token does not match one provided.');
      return false;
    }
  }

  return false;
}

您的 RewriteRule 可能会踩到那个参数。

关于facebook - Facebook 登录与 CSRF 状态 token 不匹配的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340764/

相关文章:

php - Facebook 开放图谱 : Issue between Old Facebook News Feed and New Facebook News Feed

javascript - Facebook 页面的 'like' 按钮,但带有回调

javascript - 通过 javascript 打开 facebook 连接窗口?

php - AWS Cloudfront + 负载均衡器,url 从主域更改为负载均衡器子域

.htaccess - 在 OSCLASS 脚本中使用 .htaccess 将 .htm 放在 url 的末尾

.htaccess - 如果 URL 包含某个字符串,则 htaccess 重定向

java - 无法使用java从restfb中的帖子获取用户详细信息

php - 开发facebook应用程序时是否可以删除权限并重新开始?我需要更改范围并不断出错

facebook - CSRF 状态 token 与提供的 FB PHP SDK 3.1.1 Oauth 2.0 不匹配

php - 用于广告的 Facebook access_token