ActiveAdmin和Warden路由约束

问题描述 投票:0回答:1

我们最近在维护两个不同用户模型的站点上更新了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返回nilrequest.env['warden'].authenticated?返回false

我要去哪里检查用户是否通过此配置中的ActiveAdmin进行了身份验证?

我们最近在维护两个不同用户模型的站点上更新了ActiveAdmin 1.1.0,即用户和AdminUsers。 ActiveAdmin对AdminUsers进行身份验证,其余站点对Users进行身份验证。 ...

devise activeadmin warden
1个回答
0
投票

"scopes" section of the Warden wiki为我提供了重写两个路由约束所需的线索。我没有查询Warden对象的user方法,而是将相关的Devise范围作为参数传递给authenticated?()方法。请记住,可以在routes.rb中找到Devise范围,例如::

© www.soinside.com 2019 - 2024. All rights reserved.