Rails JSON API 的请求 header 中的授权令牌未被识别

Authorization Token in request header for Rails JSON API DELETE not being recognised

我正在使用 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"'
  }

任何人都可以指出我哪里出错或指出正确的方向吗?

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

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 headers需要在第三个参数中设置。上面的解决方案将其作为第二个传递,因此未被识别。