使用 Devise for Rails 禁止/阻止用户的最佳方法是什么?
我在 Rails 应用程序中使用 Devise 进行身份验证,我希望能够阻止某些帐户并防止用户使用被阻止的电子邮件重新注册。我只是不确定最好的方法是什么。
我的第一个想法是覆盖会话和注册控制器来检查具有被阻止位的用户的模型,但我有一种感觉可能有一种更优雅的方式。
I'm using Devise for authentication in my rails app and I'd like to be able to block certain accounts and prevent users from reregistering with a blocked email. I'm just not sure what the best way is to go about it.
My first thought was to override the sessions and registrations controllers to check the model for a user with a blocked bit, but I have a feeling there might be a more elegant way.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
最好的方法是以 Devise 方式 进行:
下面假设您正在使用 Devise database_authenticatable 模块,并且您的应用程序的用户模型名称为 User。
1.实现account_active?方法。
在用户表中添加布尔
account_active
列或在用户模型中定义account_active?
方法(您可以选择你自己的方法名称)。例如:2。覆盖模型(用户)中的
active_for_authentication?
方法。3.添加返回 Flash 消息翻译的方法。
每当
active_for_authentication?
返回 false 时,Devise 就会使用inactive_message
方法询问模型不活动的原因。就是这样。您无需关心
sign_out
或redirect_to
用户。此外,用户在下次请求时会立即被锁定,而不是在下次登录后被锁定。
更多:devise/authenticable.rb。
The best approach is to do it in Devise way:
Below assumes that you are using Devise database_authenticatable module and your application's users model names User.
1. Implement an account_active? method.
Add boolean
account_active
column in users table or defineaccount_active?
method in User model (you can chose your own method name). For example:2. Overwrite the
active_for_authentication?
method in your model (User).3. Add method which returns translation for flash message.
Whenever
active_for_authentication?
returns false, Devise asks the reason why your model is inactive using theinactive_message
method.And that's it. You don't need to care about
sign_out
orredirect_to
user.Moreover, user is locked immediately, with next request, not after next sign in.
More: devise/authenticatable.rb.
我会这样做:
I would do it like this:
更好的解决方案是覆盖 active_for_authentication?设备模型(用户)上的方法。就像这样:
A better solution is to override the active_for_authentication? method on the devise model (User). Like so: