2016-05-31 70 views
1

我有兩個類似的Laravel項目。這是kernel.php的一部分代碼。兩個項目都有相同的代碼。VerifyCsrfToken總是在路由到API時調用中間件Laravel 5.2.35

protected $middlewareGroups = [ 
    'web' => [ 
     \App\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
     \Illuminate\Session\Middleware\StartSession::class, 
     \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
     \App\Http\Middleware\VerifyCsrfToken::class, 
    ], 
    'api' => [ 
     'throttle:60,1', 
    ], 
]; 

但是,VerifyCsrfToken總是叫我雖然把裏面api middlewareGroup我的路線。

我在Advanced REST Client中檢查請求標題。我找到了這個。

第一個項目結果:

enter image description here enter image description here

第二個項目的結果:

enter image description here enter image description here

第一個結果在請求頭中的cookie屬性,但第二個結果沒有

+0

很難說沒有看到產生這些響應的控制器代碼。請參閱https://laravel.com/docs/master/responses – Jeff

+0

@Jeff我附加了請求屏幕截圖,而不是響應屏幕截圖 –

回答

0

routes.php中的所有路線都包含在應用了「網絡」中間件的路線組中。您可能應該創建另一個路由文件,並讓RouteServiceProvider使用'api'加載這些文件並且不應用'網絡'中間件。

如果你打開你的RouteServiceProvider,你會看到發生了什麼。檢查map方法看它調用mapWebRoutes

+0

我不知道我的第一個'RouteServiceProvider.php'和第二個'RouteServiceProvider.php'有不同的代碼 –

0

使用沒有任何中間件的路由,它不再需要csrf令牌。

0

通過將URI添加到$ except屬性,您可以跳過對app/Http/Middleware/VerifyCsrfToken.php中所有api鏈接的csrf標記檢查。例如:

protected $except = [ 
    '/api/*' 
]; 
+0

你的回答是真實的。但我對一切都很好奇。因爲一切都很相似。第二個項目沒有異常變量,但可以除csrftoken外。 –

+0

這兩個項目在您的.env文件中都有相同的SESSION_DRIVER值?檢查您的會話設置,可能將其存儲在文件中,但忘記正確設置權限。 – Bushikot