首页 文章

无法将devise_token_auth与active_admin一起使用

提问于
浏览
1

我正在尝试将devise_token_auth与active_admin一起使用 . 运行 rails g active_admin:install User 时出现以下错误 .

错误

usr / local / lib / ruby / gems / 2.4.0 / gems / actionpack-5.1.4 / lib / action_dispatch / routing / route_set.rb:578:in add_route':无效的路由名称,已在使用中:'new_user_session'您可能使用:as`选项定义了两个具有相同名称的路由,或者您可能正在覆盖已由具有相同命名的资源定义的路由 .

routes.rb

Rails.application.routes.draw do
  devise_for :users, ActiveAdmin::Devise.config
  ActiveAdmin.routes(self)
  mount_devise_token_auth_for 'User', at: 'auth'

  scope module: 'api' do
    namespace :v1 do
      resources :users, only: [:index, :show]
    end
  end

  get '/docs' => redirect('/swagger/dist/index.html?url=/apidocs/api-docs.json')
end

2 回答

  • 1

    你可以通过定义两个控制器来尝试不同的方法:一个用于api,另一个用于 active_admin

    # app/controllers/api_controller.rb
    # API routes extend from this controller
    class ApiController < ActionController::Base
      include DeviseTokenAuth::Concerns::SetUserByToken
    end
    
    # app/controllers/application_controller.rb
    # leave this for ActiveAdmin, and any other non-api routes
    class ApplicationController < ActionController::Base
    end
    

    现在从 ApplicationController 继承 ApiControllerActiveAdmin 中的所有api控制器 .

    There is a known issue between ActiveAdmin and DeviseTokenAuth

  • 1

    我通过将 mount_devise_token_auth_for 'User', at: 'auth' 移动到api范围来实现它 . 答案是对的,here .

    Rails.application.routes.draw do
      devise_for :users, ActiveAdmin::Devise.config
      ActiveAdmin.routes(self)
    
      constraints subdomain: 'api'do
        scope module: 'api' do
          namespace :v1 do
            resources :users, only: [:index, :show]
            mount_devise_token_auth_for 'User', at: 'auth'
          end
        end
    
        get '/docs' => redirect('/swagger/dist/index.html?url=/apidocs/api-docs.json')
      end
    end
    

相关问题