私はdevise gem config設定と混同しています:
# The time the user will be remembered without asking for credentials again.
config.remember_for = 2.weeks
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again.
config.timeout_in = 10.minutes
ユーザーに[Remember Me]チェックボックスをオンにしたい(つまり、ログインしたままにする)必要がありますが、デフォルトのセッションタイムアウトは10分です。 10分後、「Remember me」をクリックしたにもかかわらず、再度ログインするよう求められます。これが真の場合、remember_forは本当に意味がありません。明らかにここに何かが足りません。
timeout_in
は、非アクティブになってから10分以内に自動的にログアウトし、remember_me
チェックボックスとは互換性がありません。どちらか一方を使用できますが、両方を使用することはできません。
デフォルトのDevise gemは:rememberableオプションと:timeoutableオプションの両方をサポートしていないという点でRyanは正しいです。ただし、Rubyのすべてのものと同様に、他のコーダーが行った決定が気に入らない場合、特にほとんどのユーザーが期待するであろう標準から逸脱している場合は、単にそれをオーバーライドできます。
(拒否された) pull request のおかげで、Devise構成ファイル(/config/initializers/devise.rb)の先頭に次のコードを追加することで、この動作を上書きできます。
module Devise
module Models
module Timeoutable
# Checks whether the user session has expired based on configured time.
def timedout?(last_access)
return false if remember_exists_and_not_expired?
last_access && last_access <= self.class.timeout_in.ago
end
private
def remember_exists_and_not_expired?
return false unless respond_to?(:remember_expired?)
remember_created_at && !remember_expired?
end
end
end
end
これにより、両方のオプションを構成して、期待どおりに機能させることができます。
config.remember_for = 2.weeks
config.timeout_in = 30.minutes
以前の回答の情報は古くなっています。私は自分のプロジェクトをテストしました。プロジェクトはRails 4
とDevise 3.5.1
と デバイスコードもチェック を使用して確認しています。
Remember Me
チェックボックスがチェックされたかどうかを確認します。
yes
の場合、if remember_exists_and_not_expired
をチェックするため、基本的にはセッション管理にconfig.remember_for
を使用します
no
の場合、if last_access <= timeout_in.ago
を使用してconfig.timeout_in
をチェックします。