【问题标题】:How to sign out user automatically from Rails app after a certain period of time?如何在一段时间后自动从 Rails 应用程序中注销用户?
【发布时间】:2013-08-19 18:31:03
【问题描述】:

在我的 Rails 应用程序中,我有一个这样的 sessions_helper

def sign_in(user)
  token = User.generate_token
  if params[:remember_me]
    cookies.permanent[:remember_token] = token
  else
    cookies[:remember_token] = token
  end
  self.current_user = user
end

def sign_out
  cookies.delete(:remember_token)   
  self.current_user = nil
end

现在,出于安全原因,如果用户闲置了 30 分钟,自动退出该用户会很好。

在 Rails 中实现这一目标的最佳方法是什么?

我正在考虑在我的ApplicationController 中使用prepend_before_filter,只要用户在应用程序中执行某事,它就会将用户cookie 的生命周期再延长30 分钟。

但是从安全的角度来看是否推荐这种方法?

感谢您的任何意见。

【问题讨论】:

  • 为什么不使用提供的 gem 之一进行身份验证?例如 devise..this gem 提供了很多功能。它经过很好的测试和维护。我会推荐它,而不是自己构建身份验证系统。
  • 谢谢,但我更喜欢构建自己的身份验证系统。
  • 为什么要重新发明轮子? :)
  • 因为它确实教会了我很多关于 Rails 的知识。强烈推荐!
  • 好吧,如果你正在学习 Rails,它会帮助你更好地理解事物。否则这些东西总是让我讨厌:)。这就是我问你的原因;)。

标签: ruby-on-rails ruby ruby-on-rails-3 security session-cookies


【解决方案1】:

我使用类似的方法,但我使用的是会话而不是 cookie。我的应用程序控制器中有一个“身份验证”操作,该操作由每个控制器的 before_filter 触发,该操作将“session [:accesses]”添加为 1,从而更新数据库中的“updated_at”列。然后我有一个 cron 作业,它从数据库中删除所有在 20 分钟内未更新的会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多