如何在没有oauth的情况下配置门卫

时间:2015-06-13 11:55:29

标签: ruby-on-rails-4 devise doorkeeper

我正在学习如何为rails app开发API。我正在尝试开发它用于移动应用程序。到目前为止,我为大多数控制器开发了一个小API。但我遇到登录问题。我正在使用设计用户管理和rails 4.1。

我观看了doorkeeper实施的railscast视频。但在视频中他们使用门卫和oauth gem。我想在没有oauth的情况下实现它。我怎么能这样做?

到目前为止,我添加了doorkeeper gem并在initialize文件夹中添加了doorkeeper.rb以及以下代码

Doorkeeper.configure do
  resource_owner_authenticator do
    User.find_by_id(session[:current_user_id]) || redirect_to(login_url)
  end
end

并在控制器中添加了before_action :doorkeeper_authorize!

module Api
  module V1
    class CoursesController < ApplicationController
      #before_action :doorkeeper_authorize!
      before_action :set_course, only: [:show, :edit, :update, :destroy]
      respond_to :json


      # GET /courses/1
      # GET /courses/1.json
      def show
        @course = Course.find(params[:id])
        @assignment = @course.assignments
        respond_with @assignment
      end

    end
  end
end

现在我在浏览器上点击此链接

http://localhost:3000/api/v1/courses/5

我没有输出但是在控制台中得到了这个

Filter chain halted as :doorkeeper_authorize! rendered or redirected
Completed 401 Unauthorized

如果我在控制器中注释掉before_action :doorkeeper_authorize!,我会得到带有预期数据的json输出。那么如何配置门卫并使其工作呢?

1 个答案:

答案 0 :(得分:0)

首先要做的事情是:您需要首先向用户验证API,之后您将收到OAuth访问令牌。 RFC 6749中列出了多个流(=获取访问令牌的方式)。然后,您将在后续请求中使用所述访问令牌来请求资源。通常,您会将此标记放在请求的Authorization标头中。

现在你正在指望会话变量会话[:user_id],它不存在,因此导致:doorkeeper_authorize!重定向,结束链,从而导致401 Unauthorized来自门卫的回应。

如果您希望使用用户的凭据进行身份验证(例如section 1.3.4),则需要为此配置门卫。 See the wiki

我希望这能帮到你。