Devise_token_auth重置密码流401错误

时间:2016-11-21 14:47:27

标签: ruby-on-rails api authentication devise

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

我设法正确设置了一切,然后遇到了问题。每当我尝试重置密码时,我都会从API中收到401 Unauthorized错误。

流程如下:

  1. 用户点击“忘记密码”按钮
  2. 用户被重定向到前端应用,其中包含用于插入“电子邮件
  3. 的表单”
  4. 前端应用使用电子邮件 redirect_url 参数
  5. 向API'auth / password'发出POST请求
  6. API通过生成 reset_password_token 并向电子邮件参数中提供的电子邮件地址发送电子邮件来响应此请求
  7. 用户点击电子邮件中的链接,将其带到“通过密码重置令牌验证用户”端点(GET /密码/编辑)
  8. 此端点验证用户并将其重定向到 redirect_url
  9. redirect_url 是前端的页面,其中包含密码 password_confirmation 字段
  10. 用户在此前端页面上提交表单,该页面向API:PUT / auth / password发送请求,其中包含密码 password_confirmation 参数
  11. API更改用户的密码并以成功消息回复
  12. 我的问题发生在第8步和第9步之间,我得到了401 Unauthorized响应。这是为什么?我该怎么做才能解决这个问题?

    编辑:

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

    EDIT2:

    我设法找出问题所在。我需要将访问令牌客户端 uid 作为标头传递。我可以访问该信息,我正在尝试通过执行以下操作来设置请求标头:

    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)

2 个答案:

答案 0 :(得分:1)

好的,实际上我克服了

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', 

但现在问题是它要求我输入current_password。在current_password我们editallow_password_change

true期间,我们不应该问# allow user to change password once without current_password @resource.allow_password_change = true if recoverable_enabled?
x<- data.frame(x1=c(1,2,3,4,5),x2=c(2,3,4,5,6),x3=c(3,2,5,2,5))

x$x2per <- (x$x2/(x$x2+x$x3))*100
x$x3per <- (x$x3/(x$x2+x$x3))*100

if(x$x2per>50){
  x$Fav <- "App"
}
else x$Fav<-"LF"

答案 1 :(得分:-1)

通过devise_token_auth申请密码更改:

  • url:/auth/password
  • 方法:PUT
  • 数据:passwordpassword_confirmation
  • 标题:access-tokenclientuid