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

时间:2017-05-11 15:16:24

标签: ruby-on-rails session devise ruby-on-rails-5

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

2 个答案:

答案 0 :(得分:7)

Devise有一个timeoutable模块供您使用。

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

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

def timeout_in
  if self.type == 'Admin'
    45.minutes
  else
    60.minutes
  end
end

这将用于代替在初始值设定项中设置timeout_in

答案 1 :(得分:1)

编辑:我的第一个回复类似于下面帖子中的第一个回答,但该帖子中的第二个回答可能更合适。因为它直接与session_store一起工作。

这是一个有用的StackOverflow链接,可以提供额外的信息:Rails 4: Session Expiry?

本文档提供了有关会话操作可用方法的一些信息:http://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html