2016-08-01 200 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