ラボ > Laravel、Lumen:セキュリティ絡み、ajax、api絡み、エラー関連

Laravelでajax(API):419エラー

API実行時に「The requested URL returned error: 419 unknown status」というエラー

作成日:2019-06-09, 更新日:2022-12-30

経緯

▼条件
・URLを「api/〇〇〇」とするのはNG
→「routes\api.php」じゃなくて「routes\web.php」にルーティングの設定を行う

▼Laravelで簡単なAPIを作って、cURLから叩いてみたら419エラーが返ってきた

The requested URL returned error: 419 unknown status

CSRF対策が原因なのでCSRFのトークンをセットしてやればいいんだろうけど・・・コレって外から叩かせたいAPIとしては致命的じゃないかな?

対策

いくつか方法がある。
・CSRF自体を無効にする
・特定のコントローラーのみCSRFを無効にする

CSRF自体を無効にする

▼「app\Http\Kernel.php」を修正

// ▼コイツを探してコメントしておく
\App\Http\Middleware\VerifyCsrfToken::class

一番、手っ取り早いけど・・・セキュリティ的にどうかと思う。

「$middlewareGroups」の「api」に「\App\Http\Middleware\VerifyCsrfToken::class」を追加すればCSRFを有効にすることが出来ると思ったら「500エラー」になってしまった。
詳細不明だし、調査する気も無し。

特定のコントローラーのみCSRFを無効にする

▼「app\Http\Middleware\VerifyCsrfToken.php」に対象外を記述

略
protected $except = [
   '〇〇〇',
   '〇〇〇',
];
略

「hoge/abc」と「hoge/zyx」のCSRFを無効にする場合

略
protected $except = [
   'hoge/abc',
   'hoge/zyx',
];
略

「hoge/*」(「hoge/」以下)のCSRFを無効にする場合

略
protected $except = [
   'hoge/*',
];
略