Intereting Posts
Netbeans 8 и xdebug очень медленные Как установить значение для переключателя при редактировании с помощью jQuery? Передача ключей api для отдыха api createUrl Yii – следует ли нам называть его на контроллере или не имеет значения? php-код для экспорта базы данных mysql Можно ли проверить, является ли объект видом определенного класса, в PHP? Декодировать объект amf3 с помощью PHP Как легко декодировать закодированную строку HTTP-chunked при выполнении необработанного HTTP-запроса? Как лучше передать сообщение пользователю между страницами Как вы пишете хороший PHP-код без использования фреймворка? как читать вывод var_export в переменную в PHP? Правила кодирования PHP? HTML5 и getUserMedia – запись аудио и сохранение на веб-сервер через определенное время (T_ENCAPSED_AND_WHITESPACE), ожидая идентификатор (T_STRING) или переменную (T_VARIABLE) или номер (T_NUM_STRING) Как создать или определить класс в PHP во время выполнения?

Laravel 5 получает InvalidStateException в AbstractProvider.php

Я пытаюсь использовать логин с facebook в laravel 5 с помощью Socialize .

Вот мой код файла маршрута.

Route::get('fb', function ($facebook = "facebook") { $provider = \Socialize::with($facebook); if (Input::has('code')) { $user = $provider->user(); return var_dump($user); } else { return $provider->scopes(['public_profile','user_friends'])->redirect(); } }); 

логин – это успех, и я получаю код, но время get $provider->user() Я получаю ошибку.

InvalidStateException в строке AbstractProvider.php 161

Solutions Collecting From Web of "Laravel 5 получает InvalidStateException в AbstractProvider.php"

Мне не нравилось просто комментировать код, который сигнализировал об ошибке (как в ответе @Dipesh Shihora), поэтому я немного откопал. Я обнаружил, что ошибка вызвана (по крайней мере, в моем случае) проблемой с сеансами.

Мой Dev-сервер настроен в соответствии с инструкциями, приведенными в этом ответе . В принципе, я «спуфинг» Google, используя URL-адрес обратного вызова, который выглядит как общедоступный адрес.

Проблема InvalidStateException появлялась для меня, потому что я посещал мою страницу входа в http://localhost/login и перенаправлялся на страницу входа в Google, которая затем вернула меня на http://myapp.example.com/callback . Проблема заключается в том, что ключ сеанса хранится в файле cookie – он был первоначально cookie для http://localhost , но когда я перенаправлялся на другой URL-адрес, cookie (и, следовательно, ключ сеанса) был недоступен. Таким образом, значение state сеанса не существовало после обновления и исключение было выбрано.

Решение? Убедитесь, что все мои просмотры на dev-машине были выполнены по адресу http://myapp.example.com а не по адресу http://localhost .

http://nhagiaodich.com/dang-nhap

Он работает на моем сайте, просто звоните -> stateless (), прежде чем получить доступ

 Socialite::driver('facebook')->stateless()->user() Socialite::driver('google')->stateless()->user() 

Попробуйте установить правильные значения в поле 'domain' config/session.php и в поле 'url' config/app.php . Кажется, это сделал трюк для меня. Я отметил, что значение в session.php должно быть без http:// , а одно в app.php должно быть с http:// .

Кроме того, я рекомендую вам следовать этому руководству: https://laracasts.com/series/whats-new-in-laravel-5/episodes/9 . Это очень полезно и понятно.

 $provider = \Socialize::with($facebook); if (Input::has('code')) { $user = $provider->stateless()->user(); } 

Возможно, это лучшее временное решение

Поэтому после того, как вы сделали какой-то рытье, если обнаружили, что проблема для меня в том, что моя конфигурация nginx была неправильной, и параметры URL (код и состояние) не были правильно переданы в файл index.php, и таким образом проверка между состоянием из сеанса и состояние с URL-адреса не срабатывало. Я модифицировал свой nginx conf, чтобы выглядеть так, и он работал нормально.

 location / { try_files $uri $uri/ /index.php?$args; } 

Для тех, кто испытывает эту проблему, вы можете установить значение домена в config / session.php в свой домен и удалить все куки в своем браузере, относящиеся к вашему URL-адресу приложения. вы также можете запустить кеш php-artisan: четкие и понятные

Я не знаю, поможет ли это кому-либо, но изменение драйвера сеанса из file в cookie разрешило проблему InvalidException для меня.

вы получаете эту ошибку, потому что у вас неправильные настройки вашего социального провайдера в вашем файле конфигурации или неправильно настроили приложение Facebook.

Посетите developers.facebook.com и убедитесь, что ваш идентификатор приложения и секретные ключи верны и указывают на правильный URL. Затем убедитесь, что ваш конфигурационный файл services.php приложения laravel обновлен с правильным перенаправлением, идентификатором и секретом.

Перейти к vendor/guzzlehttp/guzzle/src/Client.php

 $defaults = [ 'allow_redirects' => RedirectMiddleware::$defaultSettings, 'http_errors' => true, 'decode_content' => true, 'verify' => true, 'cookies' => false ]; 

изменить на

 $defaults = [ 'allow_redirects' => RedirectMiddleware::$defaultSettings, 'http_errors' => true, 'decode_content' => true, 'verify' => **false**, 'cookies' => false ]; 

Я получил временное решение для этого.

 public function user() { //if ($this->hasInvalidState()) { // throw new InvalidStateException; //} $user = $this->mapUserToObject($this->getUserByToken( $token = $this->getAccessToken($this->getCode()) )); return $user->setToken($token); } 

комментируйте $this->hasInvalidState() if в файле AbstractProvider.php и оно отлично работает.