0

<%= csrf_meta_tags %>HEAD タグに がありましたが、フォームを手動で作成したため、隠しauthenticity_tokenフィールドがフォームに挿入されませんでした。

だから私はauthenticity_token手動で追加しました:

<input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden">

Web サイトのデフォルトの連絡先フォーム (ユーザーがログインしていない) を送信すると、それを処理するアクションはトークンを検証し、要求を許可/拒否する必要があります。しかし、そうではありません: jQuery を使用してフィールドを空にし、フォームを送信しますが、エラーや例外はスローされません。

私はこの行を取得protect_from_forgery with: :exceptionし、 application_controller を拡張し、連絡先フォームに応答するアクションを持つ にapplication_controller.rb同じ行を入れました。foo_controller.rb

それで、私は何が欠けていますか?このフォームをバックエンドで検証するにはどうすればよいですか?

どうもありがとう!

4

1 に答える 1

0

送信された認証トークンが欠落しているか、セッション内のものと一致しない場合、Rails はprotect_from_forgery with:指定された処理を行いますが、リクエスト処理は終了しません。何が起こるかは、セッションが破棄されるため、リクエストはログインしていないユーザーに属するものとして処理されます。

これは、 protect_from_forgery の仕組みについて説明した優れた記事です。

コードを見ずに判断するのは難しいですが、フォーム送信コードが認証トークンの入力値を取得していないか、リクエストが行われる前に古くなったと思います。後者は、ブラウザのキャッシュから読み込まれたページや、問題のページと並行してログイン/ログアウトに使用されたブラウザのタブなど、さまざまなシナリオで発生する可能性があります。

于 2016-06-30T23:19:42.817 に答える