繁体   English   中英

Devise_token_auth 重置密码流程 401 错误

[英]Devise_token_auth Reset Password Flow 401 Error

我正在尝试构建一个 rails API,我正在使用devise_token_auth gem 使用令牌进行用户身份验证。

我设法正确设置了所有内容,但遇到了问题。 每当我尝试重置密码时,都会收到来自 API 的 401 Unauthorized 错误。

流程如下:

  1. 用户点击“忘记密码”按钮
  2. 用户被重定向到带有表单的前端应用程序以插入其电子邮件
  3. 前端应用程序使用emailredirect_url参数向 API 'auth/password' 发出 POST 请求
  4. API 通过生成reset_password_token并向电子邮件参数中提供的电子邮件地址发送电子邮件来响应此请求
  5. 用户单击电子邮件中的链接,将他们带到“通过密码重置令牌验证用户”端点(GET /password/edit)
  6. 此端点验证用户并将其重定向到redirect_url
  7. 这个redirect_url是前端的一个页面,它包含一个passwordpassword_confirmation字段
  8. 用户在此前端页面上提交表单,该页面向 API:PUT /auth/password 发送请求,其中包含密码password_confirmation参数
  9. API 更改用户的密码并返回成功消息

我的问题发生在第 8 步和第 9 步之间,在那里我收到了 401 未经授权的响应。 为什么? 我能做些什么来解决这个问题?

编辑:

从有关此问题的文档和线程中,我意识到它与标题有关。 但是,我不知道如何使用 Ruby on Rails 管理请求的标头。

编辑2:

我设法找出问题所在。 我需要将access-tokenclientuid作为标头传递。 我可以访问该信息,并且正在尝试通过执行以下操作来设置请求标头:

http = Net::HTTP.new("127.0.0.1", "3000")
request = Net::HTTP::Put.new("/api/v1/auth/password")

request.add_field('uid', @@sens_pms["uid"])
request.add_field('client', @@sens_pms["client_id"])
request.add_field('access-token', @@sens_pms["token"])

response = http.request(request)

但是,当我这样做时,出现了一个新问题。 服务器 (API) 应用程序抛出以下错误:

ActionDispatch::Cookies::CookieOverflow (ActionDispatch::Cookies::CookieOverflow)

重要信息:我在开发环境中执行此操作(没有 nginx,只有 webrick)

好吧,实际上我克服了

You must fill out the fields labeled 'Password' and 'Password confirmation

我确实更新了header

'Authorization': 'Basic ',
'Content-Type' : 'application/json', 
"token-type"   : 'Bearer', 
'access-token' : token,
'expiry':'XXXXX',
'client':'XXXXX',      
'uid':'XXXXX', 

通过devise_token_auth请求更改密码:

  • 网址: /auth/password ,
  • 方法: PUT ,
  • 数据: passwordpassword_confirmation
  • 标头: access-tokenclientuid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM