ruby-on-rails - Devise_token_auth 重置密码流程 401 错误

标签 ruby-on-rails api authentication devise

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

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

流程如下:

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

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

    编辑:

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

    编辑2:

    我设法找出问题所在。我需要通过访问 token , 客户用户名作为标题。我可以访问该信息,并且正在尝试通过执行以下操作来设置请求 header :
    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', 
    

    关于ruby-on-rails - Devise_token_auth 重置密码流程 401 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40722894/

    相关文章:

    ruby-on-rails - 如何在同一个域上托管我的API和Web应用程序?

    javascript - 全局变量不会改变 Javascript 中的值

    ruby-on-rails - 有没有办法优雅地改变rails的secret_key_base?

    jquery - 无法使用 Wicked PDF 渲染图表

    windows - CreatePatternBrush 和屏幕颜色深度

    android - 从 Android 将图像上传到 tumblr API

    java - 如何在JAVA中制作谷歌翻译支持语言的HashMap?

    java - 管理存储在mysql数据库中的用户的权限

    windows - 是否可以使用默认的 Windows 凭据以非交互方式向远程 Git 存储库进行身份验证?

    ruby-on-rails - IP地址过滤