如何为给定的身份验证令牌设置超时?超时后,令牌将被删除,用户将无法在其请求中使用它。
我正在使用rails 3并设计。
答案 0 :(得分:4)
我也在寻找这个功能,但没有办法直接做到这一点。
您可以在每次登录时重置身份验证令牌,并使用中间可记住的值:
在应用程序控制器中,在after_sign_in_path_for():
中resource.reset_authentication_token
在devise.rb中:
config.remember_for = 1.day
或者您可以创建一个cron-job来定期清除users表中的无效authentication_token条目。
答案 1 :(得分:2)
我不确定这是否正是您正在寻找的,但这是Devise中的一个简单选项。 如果在config / initializers / devise.rb中设置以下选项
config.timeout_in = 30.minutes
然后Devise应该在30分钟不活动后使令牌失效。 Devise为会话身份验证执行的操作也应该与身份验证令牌一起使用。
我在当前项目中使用过它并使用Timecop
进行测试it "should timeout without activity after 30 minutes" do
auth_token = @user.authentication_token
get "/frontend/users/#{@user.id}.json?auth_token=#{auth_token}"
response.status.should == 200
Timecop.travel(45.minutes.from_now)
get "/frontend/users/#{@user.id}.json?auth_token=#{auth_token}"
response.status.should == 401
Timecop.return
end
此外,我不认为该令牌与其中一条评论中提到的用户/密码组合类似,因为您不会以纯文本形式存储密码,而是使用您的令牌。我建议在每次注销后重置令牌。
答案 2 :(得分:1)
设计初始化文件
#/config/initializers/devise.rb
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
config.timeout_in = 1.day
# If true, expires auth token on session timeout.
config.expire_auth_token_on_timeout = true