Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php fb登录错误-CSRF状态令牌与提供的令牌不匹配_Php_Facebook_Facebook Graph Api - Fatal编程技术网

Php fb登录错误-CSRF状态令牌与提供的令牌不匹配

Php fb登录错误-CSRF状态令牌与提供的令牌不匹配,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,我在我的网站上使用facebook登录 从下载facebook php sdk源代码 对于facebook登录,请按照 在第一个实例中,它从未登录,只有在两次尝试后才能通过facebook登录。每次我尝试登录时都会显示CSRF错误 在进一步挖掘代码(base_facebook.php)后,我们知道在第一次登录时:$this->state不等于$server_info['state'],因此出现了CSRF错误 试图找到解决此错误的方法浏览各种帖子,但没有成功。请提出解决办法。谢谢,我也有这个问题

我在我的网站上使用facebook登录

从下载facebook php sdk源代码

对于facebook登录,请按照

在第一个实例中,它从未登录,只有在两次尝试后才能通过facebook登录。每次我尝试登录时都会显示CSRF错误

在进一步挖掘代码(base_facebook.php)后,我们知道在第一次登录时:
$this->state
不等于
$server_info['state']
,因此出现了CSRF错误


试图找到解决此错误的方法浏览各种帖子,但没有成功。请提出解决办法。谢谢,我也有这个问题

在我的站点上,我还通过名称“state”设置了一个cookie和$\u会话变量。这导致了与Facebook类的冲突,因为FB类使用相同的密钥名

以下是我对其他人的解决方案:

Facebook PHP SDK v3.2.3

我们要做的是用“fb_state”替换掉某些“state”实例

编辑(Marcus):我还用$\u GET['state']替换掉了$\u REQUEST['state']的所有实例。这将强制应用程序从URL post用户授权中获取“state”值,因为$\u请求将拾取您可能已经拥有的任何存储的“state”cookie。就我而言,有一个

例如:www.example.com/?code=AQA5cjNZ8iuZ…&状态=48a4a0a89ebb0c568f713fabebc4899#=

我以前存储的“状态”cookie由于我自己网站上的以前活动:上

echo $_REQUEST['state']; // produces 'ON'

echo $_GET['state']; // produces 48a4a0a89ebb0c568f713fabebcd4899
在我的网站上。我不打算仅仅为了FBSDK而改变我的站点在服务器上存储cookie和会话变量的方法

在不将$\u REQUEST更改为$\u GET的情况下,getCode()函数将返回false,因为:

if ($this->state === $_REQUEST['state']) {
不会解决。在我的例子中,实际的比较是48A4A0A89EBB0C568F713FABECD4899与“ON”

src/facebook.php

public function __construct($config) {
    ...
    $state = $this->getPersistentData('state'); // line 67
    // change to
    $state = $this->getPersistentData('fb_state');

protected static $kSupportedKeys =
    array('fb_state', 'code', 'access_token', 'user_id'); // line 83
$state = $this->getPersistentData('fb_state'); // line 263

$this->clearPersistentData('fb_state'); // 730

$this->setPersistentData('fb_state', $this->state); // line 776
src/base\u facebook.php

public function __construct($config) {
    ...
    $state = $this->getPersistentData('state'); // line 67
    // change to
    $state = $this->getPersistentData('fb_state');

protected static $kSupportedKeys =
    array('fb_state', 'code', 'access_token', 'user_id'); // line 83
$state = $this->getPersistentData('fb_state'); // line 263

$this->clearPersistentData('fb_state'); // 730

$this->setPersistentData('fb_state', $this->state); // line 776
希望这对将来有帮助

  • 马库斯

上述链接中提到的已尝试响应可能重复,但问题仍然存在,CSRF错误继续出现在错误日志中