2011-09-10 232 views
0

在我的web应用程序中,用户登录后会创建一个新会话,因此直到他关闭浏览器后,他才会保持登录状态。管理员想禁止浏览器仍处于打开状态的用户时出现此问题。即使用户被禁止并且无法再登录,他仍然保持登录状态,直到他关闭浏览器或手动注销为止。这绝对应该修复。ROR用户身份验证

是否可以将验证方法添加到每个控制器的每个动作?当然,我的意思是一个聪明的方式 - 不复制/粘贴100次。

回答

3

以下内容添加到您的应用程序控制器:

before_filter :sign_out_banned_user 

def sign_out_banned_user 
    if current_user.banned? 
    session[:current_user_id] = nil 
    redirect_to root_path, :notice => "You are banned" 
    return false 
    end 
end 
+0

你能解释为什么返回false? – NARKOZ

+1

你可以尝试去掉'return false'。如果没有'return false',在'redirect_to'之后代码将会继续,并且将会继续执行。然后会有重复的'redirect_to',因为你进入了操作。 – PeterWong

1

,必须重置会话也是我的想法。

+0

我添加了重新设置会话的行:) – PeterWong