我正在学习如何为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输出。那么如何配置门卫并使其工作呢?
答案 0 :(得分:0)
首先要做的事情是:您需要首先向用户验证API,之后您将收到OAuth访问令牌。 RFC 6749中列出了多个流(=获取访问令牌的方式)。然后,您将在后续请求中使用所述访问令牌来请求资源。通常,您会将此标记放在请求的Authorization标头中。
现在你正在指望会话变量会话[:user_id],它不存在,因此导致:doorkeeper_authorize!
重定向,结束链,从而导致401 Unauthorized来自门卫的回应。
如果您希望使用用户的凭据进行身份验证(例如section 1.3.4),则需要为此配置门卫。 See the wiki
我希望这能帮到你。