私の登録ページでは、CsrfToken ({{ csrf_field() }}
) がフォームに存在する状態で、フォームが正しく表示されています。)
フォームのHTML。
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
ユーザーには内蔵の認証を使用しています。ルートとリダイレクト以外は何も変更していません。
フォームを送信すると(リロード直後にも)、The page has expired due to inactivity.エラーが表示されます。ページを更新して再度お試しください」というエラーが出ます。
何か小さなことを見逃しているのかもしれません。しかし、それが何かはわかりません。何か良い方法はありませんか?
**更新
問題が見つかりました。セッションドライバーがarrayに設定されていました。fileに変更したところ、エラーはなくなりました。 しかし、arrayを使うと何がいけないのでしょうか?
検索から直接この回答にたどり着いた場合、OPのように{{ csrf_field() }}
でcsrfトークンをフォームに追加済みであることを確認してください。
セッションドライバーをfile:に設定している場合
storage_pathが書き込み可能でないことが関係している可能性があります。これは、ファイルベースのセッションを使用している場合、トークンに関するセッションデータを保存する場所です。 これは、is_writable(config('session.files'))
で確認できます。
OPの場合、セッションドライバーはarrayに設定されていました。 Arrayはテスト用です。 データが永続化されないため、次のリクエストでトークンを比較することができません。
arrayドライバはテスト時に使用され、セッションに保存されたデータの セッションに保存されたデータが永続化されないようにするためです。
https://laravel.com/docs/5.5/session#configuration
config/session.phpを確認する。
最後に、先日発生した問題ですが、config/session.phpにセッションドメインとセキュアの設定があるプロジェクトがありましたが、開発サイトではHTTPS(SSL/TLS)を使用していませんでした。 session.secureがデフォルトでtrueに設定されていたため、この一般的なエラーが発生しました。