0

我正在尝试在我的 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?

4

2 回答 2

1

您绝对可以使用单独的命名空间,这将使您的代码更清晰、更有条理。然而,这不是强制性的。您需要做的就是在您的 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

于 2020-11-03T16:35:21.307 回答
0

您可以参考github 上 devise_token_auth 的自述文件中的devise_token_auth 演示示例。

您的案例和演示应用程序之间的主要区别在于您将ApiController使用ApplicationController. 此外,您必须将devise_token_auth属性添加到相应的模型,(例如,如果您想devise_token_auth与用户一起使用,您必须将属性添加到表users和.)。before_action: authenticate_user!UsersController

于 2020-11-03T13:00:52.213 回答