回答
我刚刚在自己的项目中实现了这一点。以上,我在我的应用程序/控制器/ sessions_controller.rb(覆盖设计)定义我所做的就是类似这种克勒贝尔...
class SessionsController < Devise::SessionsController
protected
def after_sign_in_path_for(resource)
if resource.is_a?(User) && resource.banned?
sign_out resource
flash[:error] = "This account has been suspended for violation of...."
root_path
else
super
end
end
end
然后我加了一个布尔列到被叫用户“禁止”,所以当在后端编辑用户时,主持人检查复选框,并且布尔值将返回true。
但有一个缺陷......如果用户已经登录然后被禁用,他们仍然可以访问网站上的东西(评论等),至少在他们的会话过期或他们注销之前。所以我在app/controllers/application_controller.rb中做了这个...
class ApplicationController < ActionController::Base
before_filter :banned?
def banned?
if current_user.present? && current_user.banned?
sign_out current_user
flash[:error] = "This account has been suspended...."
root_path
end
end
end
如果检测到禁止,它会自动注销它们。无论如何,不确定整个事情是否是“最好”的方式来分析整个事情,因为我是更新的Rails,但整个事情对我很有用,并且希望它至少能给你一个好的开始。
+1工作得很好!我不认为重写after_sign_in_path_for是必要的。在应用程序控制器中实现before_filter是所需要的,但after_sign_in_path_for可能对一些有用。谢谢。 – 2011-06-10 14:05:45
好的观察,没有想到,好的重构想法,我可能会实现。但是,如果您处于不需要始终检查禁止的用户且只能登录的情况下,我会选择Devise登录覆盖。但这里有几种选择来涵盖不同的情况。 – Shannon 2011-06-13 03:59:02
这对Rails 3来说并不适用,但@Frank的回答确实是 – Dinedal 2012-04-20 01:36:27
您可以在Users表中添加一个名为“banned”的字段。
,然后在你的控制器,你可以有这样的事情:
class UsersController < ApplicationController
before_filter :deny_banned
protected
def deny_banned
if current_user.banned?
redirect_to root_path, :notice => "You are banned from this site."
end
end
end
这是不完整的,但我希望它可以帮助你以某种方式。
这不会实际登录用户,这可能会导致重大问题。 – saadlulu 2016-04-03 07:14:08
从色器件数独为authenticatable.rb:
之前验证用户和每个请求,制定检查你的模型是通过调用model.active_for_authentication活跃?这种方法被其他设计模块覆盖。例如:可确认覆盖.active_for_authentication?只有在您的模型得到确认后才会返回true。
你自己覆盖此方法,但如果你做什么,不要忘记调用超:
def active_for_authentication?
super && special_condition_is_valid?
end
所以,当你在用户数据库标志blocked
,在用户的方法模型看起来是这样的:
def active_for_authentication?
super && !self.blocked
end
是的,我认为这种方法是最好的方法,那就是拥有“封锁”策略,谢谢弗兰克! – Kulgar 2012-06-03 18:33:18
要使用此方法自定义向用户显示的错误消息,编辑'config/locales/devise.en.yml'并编辑en> devise> failure> inactive下的值 – tirdadc 2015-03-31 14:38:00
如果您不想使用“inactive '失败的消息,你可以添加一个自定义的也重写'inactive_message'也见[这里](https://github.com/plataformatec/devise/blob/master/lib/devise/models/authenticatable.rb#L50 )。 – brendanwb 2016-06-07 16:27:16
- 1. Rails和Devise:登录没有登录/密码,但使用特定的URL?
- 2. 重置Meteor帐户密码后禁用登录 - 密码
- 3. 防止禁用用户使用Rails和Devise登录
- 4. 有没有办法让用户输入密码或不用psycopg2?
- 5. '无密码登录被配置禁止'
- 6. 有没有办法为php mysqli登录存储散列密码?
- 7. 登录vbulletin没有密码(用户名和密码)
- 8. Rails/Devise - 强制密码重置
- 9. 有没有办法禁止松懈引用规则的源码?
- 10. 有没有办法检查用户是否使用JQuery登录?
- 11. Rails&Devise:用户帐户没有删除
- 12. 有没有办法在Rails路线中禁止路径?
- 13. 当没有设置密码时,是否需要在sshd_config中禁用root登录和密码登录?
- 14. 有没有办法阻止SDK登录中的用户名缓存?
- 15. 有没有办法禁用或修改Xcode的代码完成?
- 16. Devise Rails密码
- 17. Rails - Devise - 用户登录条纹
- 18. Mysql - 如何重置忘记的密码?或者有没有办法删除所有记录?
- 19. 有没有办法在IIS上注册用户名和密码?
- 20. Facebook登录重置密码
- 21. 有没有办法检查或显示哪些用户当前登录?
- 22. Rails没有密码设计
- 23. 使用Rails Devise,允许与SAML同时使用用户名/密码登录
- 24. 使用Omniauth和Devise为用户登录到Rails应用程序创建密码
- 25. 有没有办法像临时存储git登录但不是密码?
- 26. 的Windows PSQL命令行:有没有办法,允许密码登录?
- 27. 有没有办法在失败的wordpress登录中获取密码?
- 28. 无法重置登录用户的密码
- 29. Amazon Cognito - 导入用户重置密码后无法登录
- 30. 有没有办法防止重复?
的可能的复制[?什么是禁止/块用户设计为Rails的最佳方式(https://stackoverflow.com/questions/3894919/what-is-the禁止阻止用户使用设备为导轨) – Wit 2017-06-19 14:32:32
另请参阅[操作方法:-Soft-delete-a-user-when-user-deletes-account](https://github.com/plataformatec/devise/wiki/How-to:-Soft-delete-a -user-when-user-deletes-account) – mb21 2018-01-12 09:07:25