0

フォームを POST するときに、一部のユーザーに422 ActionController::InvalidAuthenticityTokenエラーが発生します。

少数のユーザーに時々発生します。後でリクエストを再試行すると、多くの場合うまくいきます。

いずれの場合も、認証トークンが送信されます。クライアントが POST と一緒にセッション Cookie を送信していないと仮定しています (これは、サーバーがトークンを検証できない理由を説明します)。これはなぜでしょうか?

最後に、フォームは javascript ( $('#new_user')[0].submit()) 経由で送信されますが、セッション Cookie の送信が何らかの形で妨げられるのでしょうか?

verify_authenticity_token残念ながら、before_filter を無効にすることはできません。

4

1 に答える 1

1

アプリの 1 つでこのシナリオに遭遇しました。セッションを memcached に保存し、セッションがキャッシュから削除された場合、またはセッションの有効期限が切れた場合、後続の post/put/delete で 422 が発生します。セッションをチェックし、セッションの有効期限が切れている場合はユーザーをログアウトします。次に、アプリケーション コントローラーのメソッド protect_from_forgery を、requires_login? の後に実行するように移動しました。

例えば

before_filter :requires_login?

protect_from_forgery

これが理にかなっていることを願っています

于 2012-11-15T15:34:56.717 に答える