使用 Devise Session 为 Rails/Ember 应用验证门卫 API

Use Devise Session to Authenticate Doorkeeper API for Rails/Ember app

我正在开发 Rails 应用程序以及相应的 API 并考虑为一些特别动态的前端组件引入 Ember。我正在使用 Devise 进行身份验证,并使用 Doorkeeper 来保护 API 端点并管理 OAuth 令牌。

我不想用 Ember 替换登录部分,因此一旦用户登录主 "logged in index" 页面,Ember 应用程序可能会被初始化。我希望 Ember 应用程序使用 public API 而不是从以 rails 为中心的控制器渲染 JSON,部分是为了简单,部分是为了强制我让 API 保持最新状态。

由于用户已经登录,我认为执行 OAuth 舞蹈并获取令牌没有意义。相反,我希望 API 允许来自已由 Devise 登录的客户端的请求(存在会话/cookie)。实际上,您应该能够在登录应用程序后在浏览器中访问 /api/v1/resources.json 并收到 JSON 响应。目前是 401 未经授权。

这看起来是一种合理的方法吗?如果是这样,有没有人有这样做的经验?

对于以后对此感兴趣的任何人,答案非常简单:

module Api
  module V0
    class ApiController < ActionController::Base
      before_action :doorkeeper_authorize!, unless: :user_signed_in?

    end
  end
end

关键部分是unless: :user_signed_in?,由Devise

提供