【问题标题】:Unable to use devise_token_auth with active_admin无法将 devise_token_auth 与 active_admin 一起使用
【发布时间】:2017-11-17 08:07:56
【问题描述】:

我正在尝试将 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': Invalid route name, already in use: 'new_user_session' You may have defined two routes with the same name using the: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

【问题讨论】:

  • 可以分享rails routes -g new_user_session的输出吗?
  • @WasifHossain 我得到与上述相同的错误。如果我删除 devise_for 我可以运行服务器但我无法登录到 active_admin

标签: ruby-on-rails devise activeadmin rails-api devise-token-auth


【解决方案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

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

There is a known issue between ActiveAdmin and DeviseTokenAuth

【讨论】:

  • 我明白了。让我深入探讨一下
【解决方案2】:

我通过将 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

【讨论】:

  • 没错!这就是它应该做的方式。也感谢您的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 2017-03-07
  • 2013-07-30
  • 2014-11-23
  • 2020-06-05
相关资源
最近更新 更多