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

时间:2015-01-23 22:14:21

标签: ruby-on-rails ruby 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

当使用RSpec 3时,我尝试调用此index操作并期望状态为401,我的状态始终为200.

我获得401的唯一时刻是用index替换head 401操作内容,但我想回复错误401并构建一个像{{1 }}

为什么忽略{ error: 401, message: 'Unauthorised' }

3 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分: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

使用render并不妨碍执行被调用的操作。使用head :unauthorized返回正确的状态代码,但空白正文。

self.statusself.response_body完美无缺。

你可以看一下我在这里遇到此问题的宝石源代码:https://github.com/YourCursus/fortress

答案 2 :(得分:1)

unauthorised替换为unauthorized