为rails中的令牌设置超时



如何为给定的身份验证令牌设置超时?超时后,令牌将被删除,用户将无法在其请求中使用它。

我使用rails 3和设计

我也在寻找这个功能,但没有找到直接实现的方法。

您可以在每次登录时重置身份验证令牌,并使用易于记住的中间值:

,在after_sign_in_path_for()中:

resource.reset_authentication_token
在devise.rb:

config.remember_for = 1.day

或者您可以创建一个cron-job来定期从users表中清除无效的authentication_token条目。

我不确定这是否是您正在寻找的,但这是在设计中一个简单的选项。如果在config/initializers/devise.rb

中设置以下选项

config.timeout_in = 30.minutes

则在不活动30分钟后,令牌将过期。在authentication_token中,与在会话认证中所做的相同的操作也应该适用。

我已经在我当前的项目中使用了它,并使用Timecop gem进行了测试:

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

另外,我不认为令牌遵循与评论中提到的用户/密码组合相同的类比,因为您不会以明文形式存储密码,而是使用令牌存储密码。我建议在每次注销后也重新设置令牌。

在设计初始化文件

#/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

相关内容

  • 没有找到相关文章

最新更新