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