use*_*381 3 curl rspec ruby-on-rails devise devise-token-auth
我正在使用带有devise_token_auth的rails-api进行身份验证.我可以通过以下方式登录:
curl -i http://localhost:3000/api/v1/auth/sign_in -F email="user@nowhere.org" -F password="password"
Run Code Online (Sandbox Code Playgroud)
但是,注销失败并显示404,并显示错误"用户未找到或未登录".通过:
curl -X DELETE -i http://localhost:3000/api/v1/auth/sign_out
Run Code Online (Sandbox Code Playgroud)
我已尝试使用多个参数和标头值组合的此命令的变体,例如:
curl -X DELETE -i http://localhost:3000/api/v1/auth/sign_out -F email="user@nowhere.org" -H Access-Token="Ae1yaTYLkSAgdhz3LtPAZg" -H Client="9AmYF6NS8tP6EOD5nPSuxw" -H Expiry="1443073493" -H Uid="user@nowhere.org" -H Token-Type="Bearer"
Run Code Online (Sandbox Code Playgroud)
无济于事.类似构造的RSpec测试也会因相同的响应和错误而失败,并且日志表明请求是通过DeviseTokenAuth :: SessionsController#destroy作为JSON处理的.
当然,我实际上并没有使用curl进行身份验证; 在编写相关代码之前,只需验证请求结构.
回答我自己的问题,我没有使用sign_out请求正确返回某些sign_in响应标头值.
我发现了一个相关的帖子,它指出了一些关键的标题.诀窍是从sign_in响应中捕获访问令牌,客户端和uid头值,然后将它们作为参数包含在sign_out请求中:
curl -i -X DELETE http://localhost:3000/api/v1/auth/sign_out -F access-token="Ae1yaTYLkSAgdhz3LtPAZg" -F client="9AmYF6NS8tP6EOD5nPSuxw" -F uid="user@nowhere.org"
Run Code Online (Sandbox Code Playgroud)
这是一个RSpec测试来说明和验证:
require 'rails_helper'
RSpec.describe "Authentication", type: :request do
it "logs a user out" do
user = User.create!(
name: "Some Dude",
email: "user@nowhere.org",
password: "password",
confirmed_at: Date.today
)
# initial sign in to generate a token and response
post api_v1_user_session_path, {
email: user.email,
password: user.password
}
expect(user.reload.tokens.count).to eq 1
# sign out request using header values from sign in response
delete destroy_api_v1_user_session_path, {
"access-token": response.header["access-token"],
client: response.header["client"],
uid: response.header["uid"]
}
response_body = JSON.load(response.body)
expect(response_body["errors"]).to be_blank
expect(response.status).to eq 200
# user token should be deleted following sign out
expect(user.reload.tokens.count).to eq 0
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1891 次 |
| 最近记录: |