Laravel Socialite从当地环境迁移后破碎

时间:2017-06-02 12:55:22

标签: php laravel-5.4 laravel-socialite

我遇到了一个真正恼人的问题。我在一个虚拟盒子里做了一些Laravel试验,现在我觉得我的应用程序已经准备好在我的服务器上运行了。因此,我将整个项目上传到我的服务器,并授予存储和bootstrap / cache文件夹的权限。

我正在使用Socialite for Twitch来验证用户身份。我在.env文件中添加了所有必需的东西,如(密钥,秘密和新的重定向网址),我还在我的抽搐应用程序设置中更改了重定向网址。无论出于何种原因,我都无法再登录了。我总是得到以下错误。

(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)

TwitchAuthController.php第34行看起来像这样,所有坏事都开始发生; P

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

我仍然在我的虚拟机上安装了项目,我将其与我的“真实”服务器同步,因此这意味着两个项目(虚拟机和服务器)完全相同。一旦我将.env文件中的重定向url和twitch设置中的重定向url更改回虚拟盒ip,登录再次正常工作。我不知道为什么它在那里完美无瑕,但在我调整服务器的设置时却没有。

可能它与“SESSION_DOMAIN”环境有关。

我将那个改为:

SESSION_DOMAIN=http://example.com

它仍然出现相同的错误,因此我将重定向网址更改为:

TWITCH_REDIRECT_URI=http://1.2.3.4/twitch/callback

并且还改变了twitch api网站本身的URL。之后我尝试了,我得到了与我的实时制作网络服务器相同的错误。所以我从.env中完全删除了SESSION_DOMAIN,它开始在我的虚拟盒子上再次运行。不知何故,这似乎与会话有关。仍然不知道为什么我的虚拟盒上的完全相同的克隆工作完美,而它在我的实时网络服务器上没有工作,尽管代码完全相同,唯一的区别是我必须为每个设置调整的重定向网址。

没有人知道吗?

最佳

最好的汤姆

3 个答案:

答案 0 :(得分:0)

我认为问题是你没有在Twitch Application配置中更改重定向URL,请检查此图像。 screen

答案 1 :(得分:0)

出于某种原因,似乎查询字符串未在我的实时环境中传递。我将Request添加到我的回调处理程序并使用dd($request)打印结果。

第一个例子是当我将设置(.env文件twitch重定向url + 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 site本身)

+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
    ]

我在这个结果中可以看到两个不同之处。首先QUERY_STRING是空的,尽管我得到的地址是这样的结果:

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

PHP_SELF也是空的,而在我的工作示例中(在虚拟框系统上)显示index.php作为结果。

我现在已经陷入困境24小时了,虽然我发现了这个细节,但仍然无法弄明白。

答案 2 :(得分:0)

哇,我真是太蠢了。我在过去24小时内浪费了无数个小时,因为我认为这与从本地环境迁移到我的服务器有关。起初我在考虑许可/会话问题或其他什么。在对我在过去一小时发现的QUERY_STRING问题进行一些研究后,我再次检查了我的webserver配置。事实证明,我只是愚蠢。即使我发誓我只是从我的开发环境中复制了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参数。