Rails/Devise - 如何在'x`分钟不活动后注销用户?

dar*_*ush 0 session ruby-on-rails devise ruby-on-rails-5

我正在开发一个包含许多角色的系统,其中一个角色ADMIN可以访问系统的关键部分,我想限制用户的会话,当他/她不与系统交互一段时间时,会话到期,下次他/她应该再次登录,我该怎么做?

jdg*_*ray 7

Devise有一个可以使用的超时模块.

在你的User模型,你会包括:timeoutable你的devise模型,并在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 = ENV['YOUR_TIME'].to_i.minutes
Run Code Online (Sandbox Code Playgroud)

如果您希望更灵活地使用您的用户类型,可以为您的User模型添加类似这样的方法:

def timeout_in
  if self.type == 'Admin'
    45.minutes
  else
    60.minutes
  end
end
Run Code Online (Sandbox Code Playgroud)

这将用于代替timeout_in在初始化程序中设置.

  • 或者`ENV.fetch('YOUR_TIME',5).to_i.minutes`如果你想要一个默认值而不是一个神秘的NoMethodErrror (2认同)