Rails JSON API DELETE的请求标头中的授权令牌无法识别

时间:2015-02-12 15:00:52

标签: ruby-on-rails json http-headers rails-api

我正在使用rails-api整理Restful JSON API。

我正在使用rspec测试我的 DELETE api / v1 / users /:id。当我使用HTTP令牌作为身份验证(用于删除操作)时,我无法通过它。我已经通过终端进行了测试,但它可以正常运行,但测试不会通过。

这是测试规范/ requests / api / v1 / users_spec.rb

describe "DELETE api/v1/users/:id" do
it "deletes the requested user" do
  user = FactoryGirl.create(:user)
  request_headers = {
    'Authorization' => 'Token token="foobar"'
  }

  delete "api/v1/users/#{user.id}", request_headers

  expect(response.status).to eq 204
 end
end

我得到的错误是expect 204 got 401.

在我的users_controller.rb中,我使用它来获取令牌

before_action :authenticate, only: [ :destroy ]
TOKEN = "foobar"

def destroy
   @user = find_user
   @user.destroy
   head 204
end

private

def authenticate
  authenticate_or_request_with_http_token do |token, options|
    token == TOKEN
  end
end

我还尝试了以下方法在request_headers

中设置授权令牌
request_headers = {
    'HTTP_AUTHORIZATION' => 'Token token="foobar"'
  }

有谁可以指出我哪里出错了或指出我正确的方向?

1 个答案:

答案 0 :(得分:2)

现在通过这种方法解决了这个问题:

describe "DELETE api/v1/users/:id" do
let(:auth_headers) {
   { 'AUTHORIZATION' => 'Token token="foobar"' }
 }
let(:user) { FactoryGirl.create(:user) }

  it "deletes the requested user" do

    delete "api/v1/users/#{user.id}", {}, auth_headers

    expect(response.status).to eq 204
  end
end

基本上需要在第三个参数中设置http标头。上面的解决方案将其作为第二个传递给它,因此它没有得到认可。