我正在使用Facebook登录我的网站
从 https://github.com/facebook/facebook-php-sdk 下载了Facebook PHP SDK Source
。对于Facebook登录,请按照 http://25labs.com/tutorial-integrate-facebook-connect-to-your-website-using-php-sdk-v-3-x-x-which-uses-graph-api/中给出的步骤进行操作
首先,它从不登录,只能在 2 次尝试后通过 Facebook 登录。每次我尝试登录时都会出现CSRF错误。
在进一步挖掘代码(base_facebook.php)时,了解到在第一次登录实例时:$this->state
不等于$server_info['state']
,因此CSRF错误。
试图找到解决此错误的方法,浏览各种帖子,但是没有成功。 请提出解决方案。 谢谢。
我也有这个问题。
在我的网站上,我还通过名称"state"设置了一个cookie和$_SESSION变量。 这导致了与Facebook类的冲突,因为FB类使用相同的键名。
以下是我对此问题的其他人的解决方案:
Facebook PHP SDK v3.2.3
要做的是将"状态"的某些实例替换为"fb_state"。
编辑(马库斯):我还用$_GET['state']交换了$_REQUEST['state']的所有实例。 这将强制应用程序从 URL 发布用户授权后获取"状态"值,因为 $_REQUEST 将拾取您可能已经拥有的任何存储的"状态"cookie。 就我而言,有一个。
例如 www.example.com/?code=AQA5cjNZ8iuZ...&状态=48A4A0A89ebb0c568f713fabebcd4899#=
由于我自己网站上的先前活动,我以前存储的"状态"cookie:ON
echo $_REQUEST['state']; // produces 'ON'
echo $_GET['state']; // produces 48a4a0a89ebb0c568f713fabebcd4899
在我的网站上。 而且我不会为了FB SDK而改变我的网站在服务器上存储cookie和会话变量的方法。
如果不将 $_REQUEST 更改为 $_GET,getCode() 函数将返回 false,因为:
if ($this->state === $_REQUEST['state']) {
不会解决。 在我的情况下,实际比较是 48a4a0a89ebb0c568f713fabebcd4899 与"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
SRC/base_facebook.php
$state = $this->getPersistentData('fb_state'); // line 263
$this->clearPersistentData('fb_state'); // 730
$this->setPersistentData('fb_state', $this->state); // line 776
希望这对将来的某人有所帮助。
- 马库斯