Laravel 5.7をインストールしました
ファイルにフォームを追加しました\resources\views\welcome.blade.php
<form method="POST" action="/foo" >
@csrf
<input type="text" name="name"/><br/>
<input type="submit" value="Add"/>
</form>
ファイルに追加されました\routes\web.php
Route::post('/foo', function () {
echo 1;
return;
});
POSTリクエストを送信した後:
419 申し訳ありませんが、セッションの有効期限が切れています。更新してもう一度お試しください。
バージョンでは5.6
そのような問題はありませんでした。
ベストアンサー1
以下を読む前に、フォームに@csrf
またはがあることを確認してください{{ csrf_field() }}
のように
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
Laravel でセッション期限切れまたは 419 ページ期限切れのエラー メッセージが表示されるのは、どこかで csrf トークンの検証が失敗したためですApp\Http\Middleware\VerifyCsrfToken::class
。つまり、ミドルウェアがすでにオンになっているということです。フォームでは@csrf
ブレード ディレクティブがすでに追加されているので、これも問題ないはずです。
次に確認するもう 1 つの領域はセッションです。csrf
トークンの検証はセッションに直接関係するため、Redis の設定が間違っていると問題が発生する可能性があるため、セッション ドライバーが動作しているかどうかを確認する必要があります。
ファイルからセッションドライバー/ソフトウェアを切り替えてみることもできます.env
。サポートされているドライバーは以下の通りです。
Laravel 5、Laravel 6、Laravel 7 でサポートされているセッション ドライバー (ドキュメントリンク)
file
- セッションは storage/framework/sessions に保存されます。cookie
- セッションは安全で暗号化された Cookie に保存されます。database
- セッションはリレーショナル データベースに保存されます。memcached
/redis
- セッションは、これらの高速なキャッシュベースのストアの 1 つに保存されます。array
- セッションは PHP 配列に保存され、永続化されません。
セッション ドライバーを切り替えた後にフォームが機能する場合は、その特定のドライバーに問題があるので、そこからエラーを修正してみてください。
エラーが発生しやすいシナリオ
おそらく、ディレクトリの権限の問題により、ファイルベースのセッションが機能しない可能性があります
/storage
(簡単に Google 検索すると解決策が見つかります)。また、ディレクトリに 777 を設定することは決して解決策ではないことに注意してください。データベース ドライバーの場合、DB 接続が間違っているか、テーブルが
sessions
存在しない、または誤って構成されている可能性があります (@Junaid Qadir のコメントによると、誤った構成部分が問題であることが確認されています)。redis/memcached
構成が間違っているか、システム内の他のコードによって同時に操作されています。
php artisan key:generate
新しいアプリ キーを実行して生成し、セッション データをフラッシュすることをお勧めします。
ブラウザのキャッシュをクリアする難しい、Chrome と Firefox が、私が覚えている以上に原因になっていることがわかりました。