2016-09-13 2 views
0

laravel 5.2を使用しています。定義済みのmiddelwares 'api'と 'web'です。カーネルにウェブがかなりの間のAPIを使用することをそのが規定されたファイルのみスロットルチェック:私のルートでapi middelwareを使用するとcsrfトークンがチェックされるのはなぜですか?

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', 
    ], 
]; 

私はAPIのルートをグループ化し、唯一の「API」

Route::group(array('prefix' => 'api', 'middleware' => ['api']), function(){ 
    Route::post('test', '[email protected]'); 
}); // End of api Group 

を適用するが、私は、送信するとき/ api/testに投稿すると、crsfトークンの不一致がスローされます。 VerifyCsrftoken.phpの例外に 'api/test'を置くと、再び動作します。 crsfトークンがルートのミドルウェアとして定義されていないとチェックされる理由を理解できません。なぜ誰かがアイデアを持っていますか?

+0

ルートファイルのルートにある 'api'ルートグループはありますか?おそらく、それは 'web'ミドルウェアを持つ別のグループに含まれていますか? –

+0

それは根の中にあります。 – Finn

答えて

1

CSRFは、App \ Http \ Kernel.phpにグローバルに登録されている「ミドルウェア」です。これを削除すると、デフォルトでCSRF保護が解除されます(Laravel4の動作)。 あなた

app/Providers/RouteServiceProvider.phpに短い手のキーを作成します:

protected $middleware = [ // .... 'csrf' => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken', ];

あなたは今どのルートにそれを有効にすることができます。

$router->post('url', ['middleware' => 'csrf', function() { ... }]);

ルートでそれを有効にするには 本当にエレガントではありませんが、あなたの質問にスポットがあるかもしれません。試してみてください。

+0

あなたの答えをありがとう。私はあなたが言及したもので少し演奏したが、それはうまくいったが、ルートの95%がcsrfを使用しなければならず、彼らは多くのグループに属している。私はすべてのルートが何らかの理由でWebミドルウェアを取得していることを確かに知っていることをすべて試しています。同じ問題があったことはありますか? – Finn

関連する問題