可能重复:
CSRF 状态令牌与提供的一个不匹配 FB PHP SDK 3.1.1 Oauth 2.0
CSRF 状态令牌与提供的一个不匹配
我一次又一次地检查了 Devs 面临的 Facebook API 类似问题。PHP-SDK 在每次运行时都会记录一个错误,上面写着
CSRF state token does not match one provided.
奇怪的是,预期的应用程序似乎工作正常(这是一个批处理发布脚本,一旦我重置批处理,它就会生成此错误。)
所以我在此处提供的 PHP-SDK 中找到了 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;
}
}
到这个(只是为了跟踪错误日志中的错误):
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 {
$add = '';
if($this->state == null){
$add .= ' state is null.';
}
if(!isset($_REQUEST['state'])){
$add .= ' state is not set.';
}
if($this->state !== $_REQUEST['state']){
$add .= ' states do not match.';
}
self::errorLog('CSRF state token does not match one provided.'. $add);
return false;
}
}
return false;
}
再次运行该应用程序时,我得到更新的错误:
CSRF state token does not match one provided. state is null. states do not match.
现在,$this->state() 为 NULL,我没想到这是 facebook sdk 中最小的错误。我确定我的应用只生成一个登录 url 请求,只有当用户与我的应用没有会话时也是如此。
帮助将不胜感激。