Rails:使用 SessionsController < Devise::SessionsController 设计会话到期
Rails: Devise Session Expiry with SessionsController < Devise::SessionsController
关于安全的 Ruby on Rails Security Guide,在 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
如何将模型连接到 Devise / 到 Devise SessionController? Devise 会使用该模型吗?它会自动执行还是需要进一步的步骤?这个例子不是针对Rails自己的cookie/session管理的吗?如果是这样,什么是 Devise / Warden 的适当补充?
谢谢
冯·斯波茨
如果您要构建自己的身份验证系统,这些说明非常有用,但 Devise 可以为您处理。
在您的用户模型中,将 :timeoutable
属性添加到您现有的 devise
语句。
在config/initializers/devise.rb
中,您可以指定超时时间,例如:
config.timeout_in 30.minutes
如果一刀切的超时限制不能满足您的需求,您还有其他几个选择:
如果您的不同型号有自己的登录路径和不同的超时限制,您可以在每个 devise_for
声明中添加 timeout_in
如果你的用户模型中有一个标志(例如,一些用户有 admin: true
),你可以向你的模型添加一个 #timeout_in
方法(参见 this entry in the Devise wiki).
不过大多数时候,使用配置文件是最好、最简单的方法。
关于安全的 Ruby on Rails Security Guide,在 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
如何将模型连接到 Devise / 到 Devise SessionController? Devise 会使用该模型吗?它会自动执行还是需要进一步的步骤?这个例子不是针对Rails自己的cookie/session管理的吗?如果是这样,什么是 Devise / Warden 的适当补充?
谢谢
冯·斯波茨
如果您要构建自己的身份验证系统,这些说明非常有用,但 Devise 可以为您处理。
在您的用户模型中,将 :timeoutable
属性添加到您现有的 devise
语句。
在config/initializers/devise.rb
中,您可以指定超时时间,例如:
config.timeout_in 30.minutes
如果一刀切的超时限制不能满足您的需求,您还有其他几个选择:
如果您的不同型号有自己的登录路径和不同的超时限制,您可以在每个
devise_for
声明中添加timeout_in
如果你的用户模型中有一个标志(例如,一些用户有
admin: true
),你可以向你的模型添加一个#timeout_in
方法(参见 this entry in the Devise wiki).
不过大多数时候,使用配置文件是最好、最简单的方法。