同じサーバーでホストされている複数のLaravelサイトがあります。作成した最新のサイトでは、お問い合わせフォームは419エラーをスローせずに送信を拒否します。Webでルーティングを設定しました.phpファイルは、他のWebサイトと同じように、ライブで機能する連絡フォームがあり、{{ csrf_field() }}
を使用してまったく同じ方法でトークンを生成および送信しています。
_$except
_の_app/Http/Middleware/VerifyCsrfToken.php
_配列にエントリを追加することで、Csrfチェックを無効にできるという同様の質問に対する回答を見つけました。私はこれが実際に419エラーを解決することを確認しました:
_protected $except = [
'contact',
'contact*',
];
_
しかしもちろん、Csrf機能を維持したいので、値のトラブルシューティングのために_$except
_配列のみを更新しました。
生成されたトークンを渡したにもかかわらず、この419の動作をする新しいLaravel環境について何が違うのか知っている人はいますか? _$except
_配列を変更するよりも、問題に影響がありました。
これまで少し議論があったので、追加の情報とコードを提供すると思いました。
まず、これはajaxフォームですが、まだ席から飛び出さないでください。私はajaxを使用した場合と使用しない場合の両方でフォームをテストしてきました。 ajaxでテストしたい場合は、jQueryリスナーに接続されているボタンをクリックするだけです。そうでない場合は、ボタンのIDを変更または削除するか、コンソールウィンドウで$("#formName").submit();
を実行します。
上記(ajax、昔ながらの送信、および.submit();
を指定したjqueryセレクター)はすべて、まったく同じ応答(419エラー)になります。
完全を期すために、これが私がホストしている他のすべてのWebサイトで機能している私のajaxコードです。 postData配列を定義してすべてを整理し、その直後にconsole.log()
ステートメントを追加して、トークンが正常に生成され、リクエストで正しく渡されていることを確認しました。
_var postData = {
name: $("#name").val(),
email: $("#email").val(),
message: $("#message").val(),
_token: $("input[name=_token]").val()
};
console.log(postData);
$.post("/contact", postData, function (data) {
...
_
何か案は? ENVまたは別のファイルに構成の問題がありますか?
他のサイトは問題なく動作しているので、古いサイトのクローンを作成し、新しいWebサイト用に変更したファイルを上書きしてバム!現在動作しています。もう少し掘り下げて、サイトのクローンバージョンと機能していないバージョンで_php artisan --version
_を実行しました。結果は次のとおりです。
作業バージョン:Laravelフレームワーク5.7.3
動作しないバージョン:Laravelフレームワーク5.7.9
おそらくこれはLaravelのバグですか?または、サーバー上の一部のパッケージが古く、新しいバージョンのLaravelで動作するように更新する必要がありますか?
フレームワークリポジトリで問題が見つかりました。これはlaravelの問題ではありません。インストールにストレージフォルダーへの書き込み権限がないため、laravelセッション、ログなどを書き込むことができません。
ファイルに書き込めないために419エラーが発生し、セッションを作成できず、csrfトークンを確認できません。
クイックフィックス:_chmod -R 777 storage
_
正しい修正:nginx/Apache /ユーザーが実際に書き込むことができるフォルダーにインストールを移動します。 nginx/Apacheを使用している場合は、アプリをそこに移動して、プロジェクトに適切な権限を付与します_(chown -R www-data: /path-to-project)
_ php artisanserveを使用している場合は、ユーザーに対する権限を変更します:chown -R $(whoami) /path-to-project
あなたはそれを手に入れ、作家に書かせればあなたは元気です。
あなたが達成しようとしていることに役立つかどうか、この質問に対する私の答えをチェックしてください フォームポストリクエストリターンエラー419不明なステータスlaravel
このコマンドを実行しますphpartisan key:generate