我的项目使用Devise进行身份验证(相当标准)。用户可以是普通用户,也可以是管理员用户。
我现在要求将管理员用户的登录限制为某些IP地址(在防火墙后面)。
我简单地考虑使用Rails路由约束,但这不适用,因为普通用户和管理员用户通过相同的登录页面登录。
所以,我想要的是:
我应该如何在这里挂钩Devise登录周期?我如何根据自定义验证接受或拒绝登录尝试?
我正在使用Rails 4.2并设计4.1如果相关
答案 0 :(得分:4)
不要使用Devise。让他们登录,用户或管理员 - 只需基本访问他们的IP地址上的某些控制器。如果他们无法访问,请重定向。
创建一个管理命名空间和基本控制器。您可以轻松地将其添加到路线中。从管理基础控制器对所有其他管理相关控制器进行子类化,以便它们继承之前的操作。
class Admin::BaseController > ApplicationController
before_action require_valid_ip
def require_valid_ip
# Test for IP. Redirect if bad
end
end
其他类将从BaseController
创建子类class Admin::OtherController > Admin::BaseController
...
end
你也可以把很多这个放在像CanCan这样的授权宝石中,但如果你的需求很简单,这也可能过于复杂。