[英]Extending Rails Application Controllers for Active Admin and devise_token_auth
我正在嘗試在我的 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 上看到的所有關於這個的答案中,似乎假設我知道如何做到這一點。
任何人都可以幫忙嗎?
編輯:
重申這個問題,因為我認為我第一次沒有說清楚。 現在,即使我也創建了 ApiController,Active Admin 和 devise_token_auth 都在使用 ApplicationController。 如何讓 devise_token_auth 使用 ApiController?
您絕對可以使用單獨的命名空間,這將使您的代碼更清晰、更有條理。 然而,這不是強制性的。 您需要做的就是在 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
您可以參考 github 上 devise_token_auth 的自述文件中的devise_token_auth 演示示例。
您的案例和演示應用程序之間的主要區別在於您將使用ApiController
而不是ApplicationController
。 此外,您必須將devise_token_auth
屬性添加到相應的模型中,(例如,如果您想對用戶使用devise_token_auth
,則必須將這些屬性添加到users
表中,並將before_action: authenticate_user!
到UsersController
。)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.