どうも、こんにちは。
今、AlmaLinuxでLaravelの勉強をしています。
今回はフォーム機能の実装をやっていましたが、フォーム送信後にページが表示されず、「419 page expired」のエラーが出ました。
このエラーは、csrfトークンが正しく送信されていない、または確認されていない場合に起きるようです。
そこで、このエラーの解消方法を調べてみたのですが、formに@csrfが入っているか、キャッシュはクリアーしたかといった基本的な事項の確認をするように言われました。
しかし、すべてきちんとやってみても全く解消されません。
そこで、少し調べてみるとcsrfトークンはセッションを使うということでセッション関係の何かが間違っているのだろうと当たりを付けて調べていきました。
セッション関係は、.envファイルに設定が書かれているということで開いて確認します。
すると、結構いろいろなところが違っていました。
後で色々調べたところ.envは練習環境で使うため本番環境用ではなかったのかもしれません。
.envファイル自体はLaravelのプロジェクトファイルにあります。
app
bootstrap
config
と初めに並んでいる列の下の方にあります。
で、どこを修正したのかを書いていきます。
・APP_URL = http://localfile
となっていたので、
APP_URL = http://〇〇.com
と自分のドメインに変更しました。
・SESSION_DRIVER=database
になっていたので、
SESSION_DRIVER=file
に変更しました
・またSESSION_DOMAIN=nullの後にSESSIONに関する事項が何も書かれていなかったので、
SESSION_COOKIE=laravel_session
SESSION_SECURE_COOKIE=true
SESSION_DOMAIN=http://〇〇.com
を付け加えました。自分はhttpsにしているので、SESSION_SECURE_COOKIEはtrueにしました。
最後にキャッシュクリアをしたら無事表示されました。
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
上記の.envファイルのうちすべてが必要だったのかはよく分かりません。
ただ、Googleの検索結果の1ページ目に書いてあるようなことをやっても解決しなかったのでここに記録しておく次第です。
プログラミングは面白いですね。
それでは!
【追記】
昨日は上手くいったのですが、今日やってみるとまた同じ419エラーが出ました。
調べてみると、上記のSESSION_DOMAINにhttp://が含まれていました。
ここは、
SESSION_DOMAIN = 〇〇.com
と書かなければいけません。
これでうまくいきました。
プログラミングは難しいですね笑
コメント