ruby-on-rails 为Active Admin和devise_token_auth扩展Rails应用程序控制器

ztyzrc3y  于 2023-06-25  发布在  Ruby
关注(0)|答案(2)|浏览(139)

我正在尝试在我的rails API后端实现devise_token_auth和Active Admin。
devise_token_auth FAQ中有非常清晰的说明,解释了如何一起实现这两个-它需要两个不同的应用程序控制器类。

# 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

我的应用中有这两个控制器,但我不知道如何从它们继承Active Admin和devise_token_auth的控制器。
我肯定我错过了一些基本的东西,因为在StackOverflow上看到的所有答案中,似乎都假设我知道如何做到这一点。
有人能帮忙吗?

编辑:

再次重申这个问题,因为我想我第一次说的不清楚。现在,Active Admin和devise_token_auth都在使用ApplicationController,尽管我也创建了ApiController。如何让devise_token_auth使用ApiController?

rpppsulh

rpppsulh1#

你当然可以使用一个单独的命名空间,这将使你的代码更干净,更有组织。然而,这不是强制性的。您需要做的就是在API的控制器中扩展您的ApiController而不是ActionController::Base
例如,这里有一个基本的API控制器,

class Api::V1::BaseController < ActionController::API
  include DeviseTokenAuth::Concerns::SetUserByToken
  include Pundit
end

以及扩展它并使用devise_token_auth作为结果的样本控制器。

class Api::V1::SampleController < Api::V1::BaseController
  def index
    render json: { success: true, email: current_user.email }, status: :ok
  end
end

下面是一个示例项目,它具有单独的Web和API控制器https://github.com/anujmiddha/rails-api-web-sample

x33g5p2x

x33g5p2x2#

你可以在github上的devise_token_auth的自述中参考devise_token_auth demo example
您的案例和演示应用程序之间的主要区别是您将使用ApiController而不是ApplicationController。此外,您还必须将devise_token_auth属性添加到相应的模型中(例如,如果您希望对用户使用devise_token_auth,则必须将属性添加到users表中,并将before_action: authenticate_user!添加到UsersController中)。

相关问题