使用Rails 4响应未授权状态(401)

Zed*_*TuX 11 ruby ruby-on-rails ruby-on-rails-4

鉴于以下Rails 4.2控制器:

class Api::UsersController < ApplicationController
  def index
    respond_to do |format|
      format.html do
        flash[:error] = 'Access denied'
        redirect_to root_url
      end
      format.json do
        render json: {}, status: :unauthorised
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

当使用RSpec 3时,我尝试调用此index操作并期望具有状态401,我总是具有状态200.

我获得401的唯一时刻是替换index动作内容,head 401但我想回答错误401,并建立一个"漂亮"的身体像{ error: 401, message: 'Unauthorised' }.

为什么被status: :unauthorised忽略了?

Ale*_*nko 14

使用错误代码而不是它的名称: render json: {}, status: 401


Zed*_*TuX 5

我不得不用以下代码替换我的控制器:

class Api::UsersController < ApplicationController
  def index
    respond_to do |format|
      format.html do
        flash[:error] = 'Access denied'
        redirect_to root_url
      end
      format.json do
        self.status = :unauthorized
        self.response_body = { error: 'Access denied' }.to_json
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

使用render不会阻止执行被调用的操作.使用head :unauthorized返回正确的状态代码,但是空白.

随着它self.status,self.response_body它的工作完美.

你可以看看我的宝石源代码,我在这里有这个问题:https://github.com/YourCursus/fortress