我们最近在维护两个不同用户模型的站点上更新了ActiveAdmin 1.1.0,即用户和AdminUsers。 ActiveAdmin对AdminUsers进行身份验证,其余站点对Users进行身份验证。两条路径都使用Devise,如下所示:
devise_for :users, controllers: {sessions: :practitioner_sessions, passwords: :practitioner_passwords}
admin_devise_config = ActiveAdmin::Devise.config
admin_devise_config[:controllers][:sessions] = :sessions
devise_for :admin_users, admin_devise_config
现在,我已经安装了我想限制管理员使用的Rails引擎(Resque :: Server),使用config/routes.rb
中的路由约束,]
module RouteConstraint class Admin def self.matches?(request) request.env['warden'].user && request.env['warden'].user.admin? end end end mount ResqueWeb::Engine, :at => "/resque", :constraints => RouteConstraint::Admin
这曾经起作用。但是,现在当AdminUser登录到ActiveAdmin时,
request.env['warden'].user
返回nil
,request.env['warden'].authenticated?
返回false
。
我要去哪里检查用户是否通过此配置中的ActiveAdmin进行了身份验证?
我们最近在维护两个不同用户模型的站点上更新了ActiveAdmin 1.1.0,即用户和AdminUsers。 ActiveAdmin对AdminUsers进行身份验证,其余站点对Users进行身份验证。 ...
"scopes" section of the Warden wiki为我提供了重写两个路由约束所需的线索。我没有查询Warden对象的user
方法,而是将相关的Devise范围作为参数传递给authenticated?()
方法。请记住,可以在routes.rb
中找到Devise范围,例如::