fb ошибка входа – токен состояния CSRF не соответствует одному предоставленному

я использую логин facebook на своем веб-сайте

скачанный facebook php sdk source из https://github.com/facebook/facebook-php-sdk

для входа в facebook, следующие шаги приведены в http://25labs.com/tutorial-integrate-facebook-connect-to-your-website-using-php-sdk-v-3-xx-which-uses-graph-api/

на первом экземпляре он никогда не входит в систему, только в состоянии войти через facebook после двух попыток. Ошибка CSRF появляется каждый раз, когда я пытаюсь войти.

на копании в коде (base_facebook.php) далее узнал, что в первом экземпляре входа: состояние $this->state не равно $server_info['state'] , следовательно, ошибка CSRF.

попытался найти решение этой ошибки при просмотре различных сообщений, однако, не удалось. пожалуйста, предложите решение. благодаря

У меня тоже была эта пробема.

На моем сайте я также установил переменную cookie и $ _SESSION именем «state». Это вызвало конфликт с классом Facebook, так как класс FB использует одно и то же имя ключа.

Ниже приведена моя резолюция для других с этой проблемой:

Facebook PHP SDK v3.2.3

То, что собиралось сделать, – это обмен некоторыми примерами «состояния» с «fb_state».

EDIT (Marcus): Я также поменял все экземпляры $ _REQUEST ['state'] с $ _GET ['state']. Это заставит приложение получать значение «state» из авторизации по умолчанию для URL-адреса, поскольку $ _REQUEST подберет любой сохраненный файл cookie состояния, который у вас уже может быть. И в моем случае был один.

Например: http://www.example.com/?code=AQA5cjNZ8iuZ…& state = 48a4a0a89ebb0c568f713fabebcd4899 # =

Мой ранее сохраненный «state» cookie из-за предыдущей активности на моем собственном сайте: ON

 echo $_REQUEST['state']; // produces 'ON' echo $_GET['state']; // produces 48a4a0a89ebb0c568f713fabebcd4899 

На моем сайте. И я не собирался менять метод моего хранилища файлов cookie и переменных сеанса на сервере только для FB SDK.

Не меняя $ _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 

Надеюсь, это поможет кому-то в будущем.

  • Маркус