繁体   English   中英

Rails:Devise Session 到期,SessionsController < Devise::SessionsController

[英]Rails: Devise Session Expiry with SessionsController < Devise::SessionsController

Ruby on Rails Security Guide on Security,在2.9 Session Expiry下给出以下示例代码:

class Session < ApplicationRecord
  def self.sweep(time = 1.hour)
    if time.is_a?(String)
      time = time.split.inject { |count, unit| count.to_i.send(unit) }
    end
 
    delete_all "updated_at < '#{time.ago.to_s(:db)}'"
  end
end

如何将 model 连接到 Devise / 到 Devise SessionController? Devise 会使用 model 吗? 它会自动完成还是需要进一步的步骤? 这个例子不是特定于 Rails 自己的 cookie/会话管理吗? 如果是这样,Devise / Warden 的适当补充是什么?

谢谢

冯·斯波茨

如果您正在构建自己的身份验证系统,这些说明非常有用,但 Devise 可以为您处理。

在您的用户 model 中,将:timeoutable属性添加到您现有的devise语句中。

config/initializers/devise.rb中,您可以指定超时持续时间,例如:

config.timeout_in 30.minutes

如果一刀切的超时限制不能满足您的需求,您还有其他几种选择:

  1. 如果您有不同的模型,它们有自己的登录路径和不同的超时限制,您可以在每个devise_for声明中添加timeout_in

  2. 如果您的用户 model 中有一个标志(例如,某些用户有admin: true ),您可以将#timeout_in方法添加到您的 model (请参阅Z3EC01EA92CAD072B9D6A0F32FB9B58 中的此条目)。

但是,大多数时候,使用配置文件是 go 的最佳、最简单的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM