我從服務器隨機發送一個500錯誤(不是全部!)發佈請求。出錯後,我必須登錄。Laravel VerifyCsrfToken.php第53行隨機發帖
我實現了使用元素和資源(如Web字體)創建html頁面的PDF2HtmlEX。 要改變我發表的帖子頁面,並獲得數據,但一些頁面(並不總是相同)阿賈克斯後返回500和裏面的數據(和日誌)後,我看到的錯誤:
[2015-12-21 22:17:48] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:53
Stack trace:
#0 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#1 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#2 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#3 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#4 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#5 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#6 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#7 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#8 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#9 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#10 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#11 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#12 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#14 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(44): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#15 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#16 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#17 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#19 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(122): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#20 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(87): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#21 /path/to/laravel-project/public/index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#22 {main}
像explaned在文檔中,我在app.blade.php主視圖模板添加...
<meta name="csrf-token" content="{{ csrf_token() }}">
。 而在JS腳本開始我補充一下:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
我GOOGLE了很多,搜索裏面計算器,但我不能看着辦吧! 問題在於錯誤發生在事件發生時,並非總是如此:似乎存在檢查令牌被認爲有效的限制。 我使用ajax,所以具有標記的元標記在帖子間永遠不會改變。
我正在使用laravel 5.1(5.0升級)。
編輯1: 我試圖增加內部項目/配置/ session.php文件'lifetime' => 120,
值:如果該值低(試過10)我可以在第二或第三後得到這個錯誤( 10-20秒後),如果值是hight(嘗試9999),我會在第30次以後發出這個錯誤(4-5分鐘後)。
編輯2: 我添加一些日誌控制器和中間件內。 我可以看到所有的獲取請求返回正確的值,發佈錯誤,其他獲取文件開始之後,在帖子的ajax標題內具有相同的標記。
我不能看到控制器的方法的服務於POST請求日誌: routes.php文件:
Route::post('/page', "[email protected]");
RController.php:
public function rPageData(){
Log::info("I am there!"); # always showed except when error occurred.
# ... other code ...
}
EDIT 3 : 更多信息:我從RController :: rPageData()中的正確文章中拋出$ request,並從Excep處理程序。 我發現前兩行userResolver和routeResolver在錯誤發佈中爲空,並且在正確的發佈中完成。看起來像用戶沒有通過身份驗證,但下一個GET請求,如我的編輯2中報告,正確。
錯誤後:
Request {#40 ▼
#json: null
#userResolver: null
#routeResolver: null
...
好貼:
Request {#40 ▼
#json: null
#userResolver: Closure {#144 ▶}
#routeResolver: Closure {#154 ▶}
...
的Request > cookies > headers > parameters > XSRF-TOKEN
裏面我有2個職位同理。
在Request > session > attributes > _token
裏面,我在2個帖子中有2個不同的標記。
編輯4:
好吧,如果你把session_start();
你routes.php文件的頂部,之後<?php
標籤,它會工作。
注意:這不是解決方案。 GrahamCampbell(第二大Laravel貢獻者)說:
NEVER do that! Because that's totally incorrect.
你有什麼建議?
預先感謝您!
你好,我已經試過:但似乎奔秒:如果我設置9999它需要很長的時間(約5分鐘)以獲得錯誤信息。如果我設置10,則會在第二個帖子中返回錯誤。爲什麼不考慮分鐘? – Tenaciousd93