2011-10-12 41 views
21

無効なCSRFトークンで投稿すると、rails/deviseが自動的にサインアウトすることに気付きました。Rails CSRFトークン - 有効期限はありますか?

ページを更新しないアプリケーションがあり、ユーザーはリアルタイムページに長時間座っています。たびにユーザーが追い出されます。 CSRFトークンが期限切れになって無効になっているのだろうかと思います。

私はこれを知りたいのですが、Rails CSRFトークンの有効期限はありますか?どこかに時間がありますか? Railsの中

おかげ

+0

しばらくアイドル状態になってから何をしているのかを説明できますか(状態更新のHTTP POST、新しいデータの取得など) – Nick

答えて

24

CSRF保護が提出された形で、またユーザセッションにフィールドとして、ランダムな値を格納することで動作します。フォームが送信されたときに値が一致しない場合、Railsはフォームの送信依頼を拒否します。

RailsにデフォルトのCookieセッションストアを使用している場合、セッションは期限切れになりません(クッキーが終了するまで)。他のもの(ファイルまたはDBバックアップセッション)を使用している場合は、そのセッションが期限切れになると、フォーム提出はCSRFエラーで失敗します。

したがって、Cookieベースのセッション(デフォルト)を使用している場合は、Cookieの有効期限を確認してください。それが正常に見える場合、それはおそらく別の問題です。

+0

csrf Cookieの有効期限については言及していません。セッションクッキーですか? – Ethan

+0

これはセッションに保存されます。 ActiveRecordがサポートするセッションを使用していない場合は、セッションクッキー内にのみ存在します。 – Lambart

+0

この回答は本当に私がいくつかの概念を把握し、見つけたバグを解決するのに役立ちました。ありがとう!とにかく、クッキーが必要な理由を本当に理解したいですか?レールがあなたにauthenticiy_tokenを与え、その同じトークンでフォームを送り返したら、そのクッキーはなぜ必要でしょうか?キャッシュをクリアした後にフォームを送信しようとしましたが、 'ActionController :: InvalidAuthenticityToken'を取得しました。フォームのトークンはセッションに格納されますか?フォームが送信されると、それはCookieとフォームの両方を送信し、両方のトークンを検証しますか?ありがとう。 –

関連する問題