Laravel Socialite сломался после перехода из локальной среды

Я застрял с реальной раздражающей проблемой. Я немного поэкспериментировал с Laravel внутри виртуальной коробки, и теперь я чувствовал, что мое приложение готово к запуску на моем сервере. Поэтому я загрузил весь проект на свой сервер и дал права на хранилище и папку bootstrap/cache.

Я использую Socialite for Twitch для аутентификации пользователей. Я добавил все необходимые вещи, такие как (ключ, секрет и НОВЫЙ URL-адрес перенаправления) в файл .env, а также изменил URL-адрес перенаправления в настройках моего приложения twitch. По какой-то причине я больше не могу войти в систему. Я всегда получаю следующую ошибку.

(1|1) InvalidStateException
in AbstractProvider.php (line 32)
at AbstractProvider->user()
in TwitchAuthController.php (line 34)
at TwitchAuthController->handleProviderCallback()
at call_user_func_array(array(object(TwitchAuthController), 'handleProviderCallback'), array())
in Controller.php (line 55)

Строка 34 TwitchAuthController.php выглядит так, здесь начинают происходить все плохие вещи ;P

$user = Socialite::driver('twitch')->user();

У меня все еще есть проект в моем виртуальном ящике, откуда я его развертываю и синхронизирую с моим «настоящим» сервером, так что это означает, что оба проекта (виртуальный ящик и сервер) абсолютно одинаковы. Как только я изменю URL-адрес перенаправления в своем файле .env и в настройках twitch обратно на IP-адрес виртуального ящика, вход в систему снова будет работать нормально. Я понятия не имею, почему там он работает безупречно, но не тогда, когда я настраиваю настройки для своего сервера.

Вероятно, это как-то связано с окружением "SESSION_DOMAIN".

Я изменил это на:

SESSION_DOMAIN=http://example.com

Он все еще получал ту же ошибку, поэтому я изменил URL-адрес перенаправления на:

TWITCH_REDIRECT_URI=http://1.2.3.4/twitch/callback

а также изменил URL-адрес на самом сайте twitch api. После этого я попытался и получил ту же ошибку, что и на моем живом веб-сервере. Поэтому я полностью удалил SESSION_DOMAIN из .env, и он снова начал работать на моем виртуальном ящике. Каким-то образом это кажется связанным с сессией, я думаю. До сих пор не понимаю, почему точно такой же клон на моем виртуальном ящике работает отлично, в то время как он не работает на моем реальном веб-сервере, хотя код точно такой же, единственная разница заключается в URL-адресе перенаправления, который я должен настроить для каждой настройки.

Никто не знает?

Лучший

Лучший Том


person wordiboi    schedule 02.06.2017    source источник


Ответы (3)



По какой-то причине кажется, что строка запроса не передается в моей реальной среде. Я добавил запрос в свой обработчик обратного вызова и напечатал результат с помощью dd($request).

Первый пример — когда я настроил настройки (URL-адрес перенаправления twitch файла .env + сам сайт twich API) на IP-адрес моего виртуального ящика, где прямо сейчас работает 1 клон.

+server: ServerBag {#42 ▼
    #parameters: array:35 [▼
      "USER" => "www-data"
      "HOME" => "/var/www"
      "HTTP_COOKIE" => "XSRF-TOKEN=blahhhblaaaaah ▶"
      "HTTP_ACCEPT_LANGUAGE" => "en-US,en;q=0.8"
      "HTTP_ACCEPT_ENCODING" => "gzip, deflate, sdch"
      "HTTP_REFERER" => "http://1.1.1.1/"
      "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
      "HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
      "HTTP_UPGRADE_INSECURE_REQUESTS" => "1"
      "HTTP_CONNECTION" => "keep-alive"
      "HTTP_HOST" => "1.1.1.1"
      "REDIRECT_STATUS" => "200"
      "SERVER_NAME" => "_"
      "SERVER_PORT" => "80"
      "SERVER_ADDR" => "192.168.1.10"
      "REMOTE_PORT" => "65268"
      "REMOTE_ADDR" => "1.1.1.1"
      "SERVER_SOFTWARE" => "nginx/1.10.0"
      "GATEWAY_INTERFACE" => "CGI/1.1"
      "REQUEST_SCHEME" => "http"
      "SERVER_PROTOCOL" => "HTTP/1.1"
      "DOCUMENT_ROOT" => "/home/tom/site/public"
      "DOCUMENT_URI" => "/index.php"
      "REQUEST_URI" => "/twitch/callback?code=somecode12345&scope=user_read+user_subscriptions&state=somestate121411"
      "SCRIPT_NAME" => "/index.php"
      "CONTENT_LENGTH" => ""
      "CONTENT_TYPE" => ""
      "REQUEST_METHOD" => "GET"
      "QUERY_STRING" => "code=somecode12345&scope=user_read+user_subscriptions&state=somestate121411"
      "SCRIPT_FILENAME" => "/home/tom/site/public/index.php"
      "PATH_INFO" => ""
      "FCGI_ROLE" => "RESPONDER"
      "PHP_SELF" => "/index.php"
      "REQUEST_TIME_FLOAT" => 1496424273.7195
      "REQUEST_TIME" => 1496424273
    ]

Вот результат, когда я меняю настройки URL-адреса для живой среды на моем сервере ((файл .env twitch redirect url + сам сайт twich api)

+server: ServerBag {#42 ▼
    #parameters: array:35 [▼
      "USER" => "www-data"
      "HOME" => "/var/www"
      "HTTP_COOKIE" => "sometoken17414115 ▶"
      "HTTP_ACCEPT_LANGUAGE" => "en-US,en;q=0.8"
      "HTTP_ACCEPT_ENCODING" => "gzip, deflate, sdch"
      "HTTP_REFERER" => "http://example.com/"
      "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
      "HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
      "HTTP_UPGRADE_INSECURE_REQUESTS" => "1"
      "HTTP_CONNECTION" => "keep-alive"
      "HTTP_HOST" => "example.com"
      "REDIRECT_STATUS" => "200"
      "SERVER_NAME" => "example.com"
      "SERVER_PORT" => "80"
      "SERVER_ADDR" => "3.3.3.3"
      "REMOTE_PORT" => "51008"
      "REMOTE_ADDR" => "9.9.9.9"
      "SERVER_SOFTWARE" => "nginx/1.10.0"
      "GATEWAY_INTERFACE" => "CGI/1.1"
      "REQUEST_SCHEME" => "http"
      "SERVER_PROTOCOL" => "HTTP/1.1"
      "DOCUMENT_ROOT" => "/var/www/site/public"
      "DOCUMENT_URI" => "/index.php"
      "REQUEST_URI" => "/twitch/callback?code=somecode12345&scope=user_read+user_subscriptions&state=somestate121411"
      "SCRIPT_NAME" => "/index.php"
      "CONTENT_LENGTH" => ""
      "CONTENT_TYPE" => ""
      "REQUEST_METHOD" => "GET"
      "QUERY_STRING" => ""
      "SCRIPT_FILENAME" => "/var/www/site/public/index.php"
      "PATH_INFO" => ""
      "FCGI_ROLE" => "RESPONDER"
      "PHP_SELF" => ""
      "REQUEST_TIME_FLOAT" => 1496425556.5687
      "REQUEST_TIME" => 1496425556
    ]

В этом результате я вижу 2 отличия. Прежде всего, QUERY_STRING пуст, хотя адрес, из которого я получаю эти результаты, выглядит так:

http://example.com/twitch/callback?code=n60im8s9c7cmvffn705jwzjbtx76ea&scope=user_read+user_subscriptions&state=8AcRvwvRcupj6lrJmYYvM6Q70A9OZEBRIRGXiQxb

И PHP_SELF также пусто, в то время как в моем рабочем примере (в системе виртуальных ящиков) в качестве результата отображается index.php.

Я сейчас в значительной степени застрял на 24 часа и до сих пор не могу понять, хотя я нашел эти детали.

person wordiboi    schedule 02.06.2017

Вау я такой тупой. Я потратил бесчисленное количество часов за последние 24 часа, потому что думал, что это как-то связано с миграцией из локальной среды на мой сервер. Сначала я думал о проблеме с разрешением/сеансом или чем-то еще. После некоторого исследования проблемы QUERY_STRING, которую я обнаружил за последний час, я еще раз проверил конфигурацию своего веб-сервера. Оказывается, я просто тупой. Хотя я мог бы поклясться, что просто скопировал настройки nginx php-fpm из своей среды разработки, ошибка была прямо здесь.

try_files $uri $uri/ /index.php$query_string; # Looked like this
try_files $uri $uri/ /index.php?$query_string; # Should have been this...

Так что все это было просто отсутствием простого вопросительного знака... Мне сейчас так плохо.

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

person wordiboi    schedule 02.06.2017