[英]Laravel CSRF protection with REST API
我在路由文件的頂部有這個代碼
Route::when('*', 'csrf', array('post', 'put', 'delete'));
當我測試我的RESTful API層時,我得到令牌不匹配錯誤。 怎么解決這個?
我將CSRF保護用於用戶可能執行的常規表單提交。 但是如何為API工作呢? 我的API調用按照常規路由分組,如下所示
Route::group(array('prefix' => 'api'), function () {
Route::resource('shows', 'ShowsApiController');
Route::resource('episode', 'EpisodesApiController');
Route::resource('genre', 'GenresApiController');
});
在您的App\\Http\\Middleware\\VerifyCsrfToken
你將有這樣一個班級,將你的路線添加到$除外
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
'shows/*',
'episode/*',
'genre/*',
];
}
您應該考慮為Web和api層使用不同的中間件組。 默認情況下,Laravel根據您使用的版本使用web
中間件組。
如果你是不是有一行這樣的Route::group(['middleware' => 'web'], function () {
在你的routes.php
的文件,然后你laravel版本是一個在默認情況下使用它。檢查你的此行的RouteServiceProvider.php
文件: https : //github.com/laravel/laravel/blob/master/app/Providers/RouteServiceProvider.php#L56 。
如果出現,刪除'middleware' => 'web'
部分並在routes.php
分組你自己。 然后將web
中間件用於需要會話,csrf和其他內容的部分,並使用api
中間件,其中您不需要這些東西( api
中間件組不包括會話,加密cookie和csrf驗證)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.