设计 - 如何禁止某些用户登录?
Posted
技术标签:
【中文标题】设计 - 如何禁止某些用户登录?【英文标题】:Devise - How do I forbid certain users from signing in? 【发布时间】:2011-08-25 15:25:09 【问题描述】:我在我的应用程序中使用 Devise 进行身份验证。
我如何禁止某些用户登录 - 有点禁用用户?
【问题讨论】:
这是一个有效的问题,应该重新打开 - OP 使用 devise 询问“我如何禁止某些用户登录”。 【参考方案1】:您想要进行授权,而不是身份验证。不过,Devise 只进行身份验证。 IE。 devise 只告诉您用户就是他所说的那个人。 您需要其他东西来禁止他使用该网站。
授权是一个热门话题,有一整套可以帮助您的宝石:http://ruby-toolbox.com/categories/rails_authorization.html 任君挑选。
【讨论】:
我知道区别。问题是我想禁止用户登录,而不是访问某些控制器。【参考方案2】:听起来你可能对康康舞感兴趣
https://github.com/ryanb/cancan http://railscasts.com/episodes/192-authorization-with-cancan【讨论】:
这不是对所提问题的回答。大多数人都知道授权和身份验证之间的区别。问题是如何做到让用户无法登录。【参考方案3】:这样做:
为User
模型创建一个名为is_active
的列。
然后将下面的代码添加到User
模型中:
class User < ActiveRecord::Base
#this method is called by devise to check for "active" state of the model
def active_for_authentication?
#remember to call the super
#then put our own check to determine "active" state using
#our own "is_active" column
super and self.is_active?
end
end
更新
正如 Matt Huggins 所说,该方法现在称为 active_for_authentication?
(Documentation)
【讨论】:
看起来这已被重命名为active_for_authentication?
而不仅仅是 active?
。
the method is now called active_for_authentication?
表示你的方法名应该是active_for_authentication?
而不是active?
。
设计维基 - How to customize user account status validation when logging in
重要提示:active_for_authentication?
必须是公共方法!
super and self.is_active?
可以简化为super && is_active?
【参考方案4】:
向User
模型添加一列:allowed_to_log_in
。
然后将此添加到/app/models/user.rb
:
def active_for_authentication?
super and self.allowed_to_log_in?
end
如果您想通过自定义消息通知用户,您也可以添加此消息:
def inactive_message
"You are not allowed to log in."
end
我认为这很重要,因为来自 Devise 的标准信息说:
“您的帐户尚未激活。”
这让用户感到困惑,真正的原因是您已“禁止”他们登录。
【讨论】:
我正在实现一个用户暂停功能,但是现在用户注册也会显示 inactive_message“您的帐户当前被暂停”。我可以为新帐户激活和用户暂停提供不同的非活动消息吗? kiprosh.com/blog/… 感谢 inactive_message 的评论。以上是关于设计 - 如何禁止某些用户登录?的主要内容,如果未能解决你的问题,请参考以下文章