设计不同 parent class

Devise with different parent class

我在我的 rails 应用程序中使用设计,并且我在 '/...' 有一个 html 版本,在 '/api/v 有一个 api #/...' 设计控制器的实现在 '/sign_in' 和 '/api/v1/sign_in' 等处应该不同。我还有一个 ApiController,我的所有控制器都在其中api 命名空间继承自。

基本上我的应用程序需要两套不同的设计,每套都有不同的 parent class。

我能够在 api 命名空间中生成控制器并将设计的 parent 更改为 ApiController,但这搞砸了常规站点。那不行。

我可以为我的 ApiController 制作一个模块,然后将其包含在每个设计控制器中……但这看起来很臭。

在 api 中我只需要一些设计功能,所以也许我可以直接实现它们而无需设计。但是我会失去确认功能和其他东西。

我该怎么办?

如果您想查看任何代码,请告诉我。

您可以指定在路线中使用的控制器:

devise_for :users # uses the normal devise controllers

namespace :api do
  devise_for :users, controllers: { sessions: 'api/sessions' }
end  

class Api::SessionsController < Devise::SessionsController
end

就是说 - 创建您自己的控制器来处理 API 中的身份验证和会话与 Warden(Devise 的较低级别组件)非常简单,并且比硬塞进 Devise 进行基于令牌的身份验证要干净得多或 HMAC 例如。