【问题标题】:Rails: Devise Session Expiry with SessionsController < Devise::SessionsControllerRails:使用 SessionsController < Devise::SessionsController 设计会话到期
【发布时间】:2021-07-24 21:07:17
【问题描述】:

Security 上的Ruby on Rails Security Guide2.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/会话管理吗?如果是这样,与 Devise / Warden 的适当补充是什么?

谢谢

冯·斯波茨

【问题讨论】:

    标签: ruby-on-rails session devise certificate-expiry


    【解决方案1】:

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

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

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

    config.timeout_in 30.minutes
    

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

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

    2. 如果您的用户模型中有一个标志(例如,某些用户有admin: true),您可以在您的模型中添加一个#timeout_in 方法(请参阅this entry in the Devise wiki)。

    不过,大多数时候,使用配置文件是最好、最简单的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多