仅对authentication_token超时,而不是对数据库可验证

时间:2014-06-04 13:19:52

标签: ruby-on-rails-3 devise

config/initializers/devise.rb文件中,

config.timeout_in = 30.minutes

但这会影响从浏览器登录的用户,并且我认为重置auth_token。但是,我需要在很短的时间后重置auth_token。怎么做?

1 个答案:

答案 0 :(得分:2)

您可以通过在User模型中创建名为expire_auth_token_on_timeout的类方法来控制令牌超时的行为。如果设置了此方法,则设置将在超时(与用户会话一起)时重置令牌。 (这在timeoutable.rb)中定义

现在,如果你想让auth令牌过期,你可以挂钩到同一个warden钩子并亲自检查并自己打电话给record.reset_authentication_token!

有问题的回调是after_set_user,如the warden wiki

中所述

但是你必须考虑如何解决这个问题,并在模型中创建一个单独的时间戳,记录最后一次授权令牌访问,以确保在一定时间后使其过期。 (您还应该能够通过请求对象确定请求是否是令牌请求 - 请记住,您处于机架级别,因此您可以通过env对象访问请求。)

很抱歉,我无法为此提供任何示例代码,但您必须使用该实现,并且我没有方便的测试用例。