簡體   English   中英

使用REST API進行Laravel CSRF保護

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM