gpt4 book ai didi

ruby-on-rails - 为什么我无法使用 devise_token_auth 和 curl 注销?

转载 作者:行者123 更新时间:2023-12-04 06:09:54 24 4
gpt4 key购买 nike

我正在使用带有 devise_token_auth 的 rails-api 进行身份验证。我可以通过以下方式登录而不会出现问题:

curl -i http://localhost:3000/api/v1/auth/sign_in -F email="user@nowhere.org" -F password="password"

但是,注销失败并显示 404 和错误“未找到用户或未登录”。通过:
curl -X DELETE -i http://localhost:3000/api/v1/auth/sign_out

我曾尝试使用参数和 header 值的多种组合对该命令进行变体,例如:
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"

无济于事。类似构造的 RSpec 测试也失败并显示相同的响应和错误,日志表明请求是通过 DeviseTokenAuth::SessionsController#destroy 作为 JSON 处理的。

当然,我实际上并没有使用 curl 进行身份验证;只是在编写相关代码之前验证请求结构。

最佳答案

回答我自己的问题,我没有使用 sign_out 请求正确返回某些 sign_in 响应 header 值。

I found a related post 指出了一些关键的标题。诀窍是从 sign_in 响应中捕获访问 token 、客户端和 uid header 值,然后将它们作为参数包含在 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"

这是一个 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

关于ruby-on-rails - 为什么我无法使用 devise_token_auth 和 curl 注销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com