Rails:在事件中注销登录用户

时间:2011-04-05 14:10:40

标签: ruby-on-rails session devise

我正在使用带有Devise gem的Rail3。当您需要锁定用户登录时,它的确很棒。

但它只适用于新的登录尝试。 如果他已经登录 - 它不会立即签出。

这是典型的用例:

给予管理员用户 当检测到某个用户的可疑活动时,他会使用malicious_user.lock('locking-reason')

锁定它
% can config/initializers/session_store.rb
AppFoo::Application.config.session_store :cookie_store, :key => '_foo_session'

3 个答案:

答案 0 :(得分:1)

鉴于HTTP的无状态,您无法立即注销用户,因为您需要等到他们向您的服务器发出另一个请求。你可以通过我推测的推送服务解决这个问题,但这样就太过分了。

我的解决方案是将该人员添加到黑名单,然后在他们尝试访问仅供登录用户使用的部分时检查他们是否在黑名单中。这将使他们无法登录,直到您决定他们的活动是否可疑。

示例:

怀疑用户有无法忍受的活动

管理员想要检查一下,所以他们会暂时将用户添加到黑名单。

用户点击添加到黑名单时当前所在页面区域。

代码检查登录状态和列入黑名单的用户。

由于用户被列入黑名单,他们会被告知需要登录才能访问内容

用户尝试再次登录后,您可以通知他们他们的帐户已暂时停用(或者您可以在上一步中执行此操作)。

答案 1 :(得分:1)

也许最简单的方法是在锁定用户时将用户重定向到注销操作:

malicious_user.lock('locking-reason')
redirect_to '/logout' and return

我不熟悉Devise所以这可能不是最好的解决方案,甚至可能,但这就是我如何解决问题

答案 2 :(得分:1)

在ApplicationController中使用before_filter,它将执行以下操作

 before_filter :kick_out_blocked_user


 protected

 def kick_out_blocked_user       
   unless current_user.try(:active?)
      redirect_to destroy_user_session_path        
   end
 end