2017-06-02 105 views
0

我被一个真正烦人的问题困住了。我在一个虚拟盒子里做了一些Laravel的实验,现在我觉得我的应用程序已经准备好在我的服务器上运行了。因此,我将整个项目上传到我的服务器,并授予存储和引导/缓存文件夹的权限。Laravel社交站从本地环境中移动后破了

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

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

我还是从我发展Deng,并同步在我的虚框项目与我的“真实”的服务器,所以这意味着这两个项目(虚拟箱和服务器)是完全一样的。只要我将.env文件中的重定向url和twitch设置中的重定向url更改回虚拟盒子ip,登录就会再次正常工作。我不知道为什么它的功能完美无瑕,但当我调整我的服务器设置时却不行。

可能它与“SESSION_DOMAIN”env有些共同点。

我改变了一个:

SESSION_DOMAIN=http://example.com 

它仍然得到了同样的错误,所以我改回重定向的URL:

TWITCH_REDIRECT_URI=http://1.2.3.4/twitch/callback 

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

没有人知道吗?

最佳

最佳汤姆

回答

0

我认为问题是,客人不愿意改变重定向URL抽搐应用配置,检查此图像。 screen

+0

嗨,我做到了。这就是我的意思“...也改变了抽搐api网站本身的URL。” – wordiboi

0

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

第一个例子是当我调整设置(.env文件抽搐重定向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文件抽搐重定向网址+ 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个区别。

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

而且PHP_SELF也为空,而在我的工作示例(虚拟音箱系统)显示index.php的结果:eventhough地址我从看起来这会导致这样首先QUERY_STRING是空的。

虽然我发现了这些细节,但现在我已经24小时坚持了下来,仍然无法弄清楚。

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参数中。