Laravel API の POST および PUT メソッドの 419 ステータス コードについて
Laravel を使用して RESTful API を開発する場合、419 ステータス コードに遭遇するのが一般的です。 POST メソッドと PUT メソッドのステータス コード。このエラーは、Laravel の CSRF トークン検証プロセスが原因で発生します。
Laravel 5.4 以前のバージョンでは、CSRF トークンは POST メソッドや PUT メソッドを含むすべてのリクエストに対して有効です。これは、クロスサイト リクエスト フォージェリ (CSRF) 攻撃からアプリケーションを保護するためです。デフォルトでは、CSRF トークンはフォーム内の非表示フィールドとしてビューに追加されます。
POST または PUT リクエストが送信されると、Laravel はリクエスト データとともに有効な CSRF トークンを受信することを期待します。有効なトークンが見つからない場合、Laravel は「419 CSRF トークンの不一致」例外を生成し、419 ステータス コード応答を返します。
CSRF 保護からのルートの除外
Toこの問題を解決するには、CSRF トークン検証から特定のルートを除外できます。 Laravel 5.5 以降では、API ルートに web.php の代わりに api.php ファイルを使用できます。CSRF 検証はデフォルトでは有効になっていません。
API ルートに web.php を使用している場合は、 VerifyCsrfToken ミドルウェアの $excel プロパティに URI を追加することで、CSRF トークン検証から除外できます。例:
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
'/api/*',
];
}
これにより、/api で始まるすべてのルートが CSRF トークン検証から除外されます。
非 API ルートの代替ソリューション
次のルートを除外する場合CSRF 保護は適切ではありません。ルート グループ内の特定のメソッドに対して CSRF 検証を無効にすることができます。例:
Route::group(['middleware' => 'web'], function () {
Route::post('/my-route', 'MyController@store')->withoutMiddleware('verify-csrf-token');
});
これにより、/my-route.
への POST リクエストの CSRF トークン検証が無効になります。免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3