Laravel Socialite InvalidStateException в строке 200 AbstractProvider.php

Я создаю веб-приложение в своей локальной системе (Ubuntu-14.04 64Bit), используя laravel 5.3. Я использовал Socialite для входа из социальных сетей. Настроил G +, Facebook, GitHug. Я использую Chromium в качестве браузера по умолчанию. Наконец проблема в том, что я получаю

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

часто. Я пытался

php artisan cache: очистить

Конфигурация php artisan: очистить

композитор дамп-автозагрузка

они помогают временно решить проблему, снова поднимая проблему.

пожалуйста, помогите мне в этом вопросе ..


person Shankar Akunuri    schedule 13.12.2016    source источник


Ответы (5)


У меня такая же проблема, и я много читал об этом, это зависит от того, имеет ли URL-адрес, по которому вы находитесь в момент запроса на вход, www. в начале или нет. В config\services.php, если у вас установлено перенаправление как http://sitename.tld/callback/facebook, oauth работает, если вы отправляете запрос на вход из sitename.tld, а если вы пытаетесь из www.sitename.tld, вы получаете исключение.

Я еще не понял, как заставить его работать с www и без него в начале.

person Luigi Caradonna    schedule 25.01.2017

Я получал это исключение, потому что «состояние» не было сохранено в сеансе. Но я использовал метод asPopup - Socialite::driver('facebook')->asPopup()->redirect();, поэтому я сохранил сеанс - $request->session()->save();. Итак, я решил эту проблему.

или попробуйте

session()->put('state', $request->input('state'));
$user = Socialite::driver('facebook')->user();

оно работает

person Serhii Cherednyk    schedule 03.08.2017

Если строка 200 AbstractProvider.php вызывает исключение, когда состояние пользователя отсутствует, означает, что пользователь не может быть создан.

Сначала проверьте свой код, когда вы получите данные от провайдера (facebook, github), если вы создаете пользователя и возвращаете его.

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

person yns    schedule 20.01.2017

У меня такая же проблема, и она решена за 3 шага;

  1. добавить запрос вверху используйте Illuminate \ Http \ Request;

  2. Передать объект запроса в функцию

    общедоступная функция handleProviderCallback (Request $ request) {try {$ user = Socialite :: driver ('facebook') -> user (); } catch (Exception $ e) {выбросить новое исключение; }}

  3. Очистить кэш. php artisan cache: очистить

person Muzammil Hussain    schedule 09.11.2018

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

Я разрабатываю на рабочем столе Ubuntu 18.04, поскольку это сервер с графическим интерфейсом. Socialite отлично работает локально, но как только я отправил / извлек изменения через git на сервер, он закрылся.

Я запускал трассировки, записывая, что было отправлено в Google и из него. Я «dd ($ _ GET)», чтобы получить необработанный дамп до того, как Socialite получила возможность получить информацию, поэтому я знал, что было сохранено и готово к использованию. Вся информация была там, но «Светская львица» ее, похоже, не «видела». Именно тогда я подумал, что это моя конфигурация заголовка apache2, мешающая файлам cookie / данным сеанса.

Я установил безопасность заголовков в своих конфигурациях apache2. Одна из настроек была

Header always edit Set-Cookie ^(.*) "$1;HttpOnly;Secure;SameSite=Strict"

Этот параметр мешал получать информацию о файлах cookie, которая была необходима светскому человеку. Я удалил этот параметр из конфигурации заголовка apache2 (закомментировав) и перезапустил Apache. Наконец, я удалил все сеансы в хранилище / framework / session / * и удалил их из своего браузера на всякий случай. У меня это сработало.

После того, как он заработал, один за другим включил и протестировал каждый из следующих параметров, чтобы фреймворк обезопасил, какую информацию заголовка он может использовать:

SESSION_SECURE_COOKIE=true

в моем файле .env

'http_only' => true, и 'same_site' => 'lax' (установка на "strict", похоже, не сработала)
в моем файле config / session.php.

Теперь мы вернулись к тестированию безопасности и корректировке вещей, если это необходимо.

person Stephen    schedule 26.05.2019