【发布时间】:2016-05-31 12:10:33
【问题描述】:
我正在开发基于 Api 的应用程序,site.com(客户端应用程序),api.site.com(服务器应用程序)
在我的 api.site.com 中,有密码、确认控制器,它们是从 Devise 控制器继承的。默认情况下,Devise 父控制器是 Application 控制器,但 Devise 继承的控制器需要通过 ApiBaseController api_authentication 动作。所以,Devise.rb 有如下配置:
config.parent_controller = 'ApiBaseController'
Api 身份验证现在工作正常。
ApiBaseController 示例代码:
class ApiBaseController < ApplicationController
before_action :api_authentication
def api_authentication
api_key = request.headers['Api-Key']
@app = Application.find_by_api_key(api_key) if api_key
unless @app
return render json: { errors: { message: 'Something went wrong, contact admin', code: '1000' } }
end
end
end
现在我正在使用 ActiveAdmin,安装 ActiveAdmin 后我尝试在浏览器上打开 http://localhost:3000/admin/login,我在浏览器上看到以下错误响应,而不是活动的管理员登录页面:
{"errors":{"message":"Something went wrong, contact admin","code":1000}}
我检查了问题,发现active_admin/devise/sessions 控制器也通过了 ApiBaseController。这是因为我们将父控制器设置为 ApiBaseController (config.parent_controller = 'ApiBaseController')。我删除了代码,ActiveAdmin 工作正常。
但是密码,确认控制器没有通过 ApiBaseController api_authentication(),因为我删除了设计配置 (config.parent_controller = 'ApiBaseController')。
所以如果你们已经理解了这个问题,请告诉我解决方案。
综上所述,我需要所有 api Devise 继承的控制器都需要通过 ApiBaseController 进行 api_authentication() 检查,而 ActiveAdmin Devise 控制器不需要通过 ApiBaseController。
提前致谢。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 devise