2016-08-01 196 views
6

我在生产服务器上遇到TokenMismatchException,但该应用程序在本地Xampp服务器和另一个托管上正常工作。它是我们的内部服务器,所以我们不能改变它。我们必须使用它,但我们不明白问题在哪里。Laravel 5.2生产服务器上的TokenMisMatchException

请朋友们帮助我,我是否需要更改服务器中的任何内容,如插件,扩展或其他任何内容,请让我知道。下面是截图如下:

Error on production when submitting login blank and geeting token mismatchexception

This on my personal hosting and the same is working fine here.

以上sceenshot是从生产和托管服务提供商之一。在生产服务器laravel应用程序中给予tokenmismatchexception,而同一应用程序在另一个托管提供程序上正常工作。我们不明白为什么会发生这种情况。请告诉我们该怎么做。

更新:

我有新鲜的laravel 5.2和运行php artisan make:auth后,我已给予777权限的文件夹,然后donw什么。我仍然得到这个例外。

+0

生产服务器负载是否平衡? –

+0

我这么认为。我没有配置服务器。它已由工程师配置。 – Mandy

+0

如果服务器负载均衡,并且您正在将会话存储在文件系统中,那么您将在发布表单时收到问题。我在生产Laravel网站上遇到过这种情况。如果IP不同,请在提交表单时检查帖子并获取信息,否则您将遇到我提到的问题。解决方案是Redis或类似的处理会话,并坚持在IP –

回答

4

在HTML表单

<input type="hidden" name="_token" id="_token" value="{{csrf_token()}}"> 

刀片

{!! Form::token() !!} 

添加它并添加你的路线在网络middwlware

Route::group(['middleware' => 'web'], function() { 
     // Place all your web routes here... 
}); 
+0

中起作用,我正在使用Html Collective和{{Form :: open()}}来添加令牌隐藏字段自动。如果这将是问题,那么为什么应用程序在另一个主机上工作。我认为问题与服务器有关,而不是来自应用程序。 – Mandy

+0

我更新了我的帖子 – paranoid

+0

我已经将{{csrf_field()}}这一行添加到了我的表单中,并且它也生成了令牌隐藏字段。 – Mandy

0

我有同样的问题,我用

<form role="form" method="POST" action="{{ url('laravel-master/login') }}"> 

<input type="hidden" name="_token" value="{{ session()->getToken() }}"> 

这行在我的表单视图。

+0

这也不起作用。 – Mandy

+0

尝试更新的答案。请确保您的网址与[{url('laravel-master/login')}}相同' – Sachith

+0

这也不起作用。它还增加了两次laravel-master。 – Mandy

1

我有同样的问题,你必须在你的配置文件中创建令牌。

尝试使用工匠命令$ php artisan key:generate或手动创建密钥。

+0

这也行不通。密钥的生成方式如下:应用程序密钥[base64:some key =]设置成功。 – Mandy

+0

然后在config/app.php中手动创建它。我认为它应该是32个字符的长度。任何字符串。 – Michal

+0

还要确保你在ENV文件中有适当的变量。 – Michal

1

也许您在用户登录时出错。最近我遇到了同样的问题。在我的情况,我用的Auth::login($user)Auth::attempt...

Auth::login($user,true)代替其次,你也应该看看,如果你在你的用户数据库remember_token列的问题。

第三,您需要检查会话的存储位置。

我希望它能帮上忙!

+0

目前我没有做任何事情,我正在使用laravel脚手架。所以无论你说什么都不可能在我的情况下。目前我正在使用数据库进行会话,但之前我使用的是文件。 – Mandy

2

这可能是没有正确设置的会话。 尝试删除您的PHP_SESSID Cookie或更改会话存储在服务器上的方式。

您还可以检查会话是否可以正常使用测试路线。

+0

如何删除PHP_SESSID cookie – Mandy

+0

@Mandy:如果您使用的是Firefox,它在'Preferences> Privacy'中。我不知道其他浏览器 – corentingi

1

我有这个问题,我的问题是在我的.ENV文件,这是生产和地方之间的不同

SESSION_DOMAIN=custom_domain_here 

设置。这会导致会话被错误地创建,并抛出TokenMismatch。

希望这可以帮助别人。

0

尝试验证会话文件=>应用程序/配置 “域” =>“IP住址或了Domaine名”, 如果酒庄名称有SSL证书认证 更改为True 我希望它会安全变量帮助您:D