LaravelでCSRF保護からURIを除外する方法についてです。
webのCSRF保護とエラー
routes/web.php
に外部からのリクエストを想定して/some/endpoint
のエンドポイントを作り、リクエストを投げるとCSRF token
についてのエラーが出る。
[2020-01-22 18:56:41] production.ERROR: EXCEPTION some/endpoint {"statuscode":500,"error_info":"Illuminate\\Session\\TokenMismatchException: CSRF token mismatch. in /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:82
これは、デフォルトでmiddlewareにVerifyCsrfTokenが設定されているためです。
routes/api.php
にはその設定がないためリクエストが通ります。
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class, ←これ
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
特定のURIのCSRF保護を除く
VerifyCsrfTokenの$except`に追加したエンドポイントはCSRF保護から除かれます。
app/Http/Middleware/VerifyCsrfToken.php
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'some/endpoint',
'foo/*',
];
}
この例では、some/endpoint
とfoo/
に続くURIがCSRF保護から除かれました。
laravel newコマンドでbash:laravel:command not found
Laravelschedule2020-10-05
LaravelのModelsのディレクトリ構成を変更する
Laravelschedule2020-09-02
【Laravel】UserAgentでガラケー用のViewを切り替えるためのmiddleware
Laravelschedule2020-04-21
LaravelでCSRF保護からURIを除外する
Laravelschedule2020-01-23