Safari で iframe からフォームを投稿すると、Invalid Authenticity Token 例外が発生します。iframeなしで試してみると、うまくいきます。
なぜそれが起こっているのですか?どうすればこれを修正できますか?
Safari で iframe からフォームを投稿すると、Invalid Authenticity Token 例外が発生します。iframeなしで試してみると、うまくいきます。
なぜそれが起こっているのですか?どうすればこれを修正できますか?
認証トークンは、Rails がユーザーを CSRF 攻撃から保護するために使用するメカニズムです。これは、Rails Authenticity Tokenの理解から得られた良い説明です
ユーザーがフォームを表示してリソースを作成、更新、または破棄すると、Rails アプリはランダムな Authenticity_token を作成し、このトークンをセッションに保存して、フォームの非表示フィールドに配置します。ユーザーがフォームを送信すると、Rails は Authenticity_token を探し、それをセッションに保存されているものと比較し、それらが一致する場合、リクエストは続行できます。
したがって、基本的には、モデル レールを変更するすべてのアクションについて、それが自分による変更であることを確認する必要があります。
Rails は、次のような html タグを使用して秘密の認証トークンをフォームに追加することにより、(form_for
またはform_tag
ヘルパーを使用して) これを行います。<input name="authenticity_token" type="hidden" value="Som3Thin10ngAndUGly">
あなたの問題に戻ります: 私は iframe を使ったことがないので、何が起こっているのかわかりませんが、あなたの iframe フォームが authencity_token を渡していないと思います。この場合、解決策は簡単です。上記のような非表示の入力を追加し、form_authenticity_token
メソッドを使用してその値を設定します。