Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails设计\u令牌\u身份验证gem,如何设置密码重置链接?_Ruby On Rails_Ruby_Device - Fatal编程技术网

Ruby on rails Rails设计\u令牌\u身份验证gem,如何设置密码重置链接?

Ruby on rails Rails设计\u令牌\u身份验证gem,如何设置密码重置链接?,ruby-on-rails,ruby,device,Ruby On Rails,Ruby,Device,我使用这个gem的密码重置功能有问题。 这是文件中的内容 /password/edit GET “通过密码重置令牌验证用户。此路由是目标 密码重置确认的URL。此路由必须包含 重置密码令牌和重定向url参数。将设置这些值 由生成的确认电子邮件自动发送 密码重置请求。“ 当用户忘记密码时,他们可以输入注册的电子邮件,并通过电子邮件接收密码重置链接 职位: params=电子邮件和重定向链接 () 我可以通过电子邮件发送密码重置链接,但当我单击链接或电子邮件中的“更改我的密码”时,它

我使用这个gem的密码重置功能有问题。

这是文件中的内容

/password/edit     GET  
“通过密码重置令牌验证用户。此路由是目标 密码重置确认的URL。此路由必须包含 重置密码令牌和重定向url参数。将设置这些值 由生成的确认电子邮件自动发送 密码重置请求。“

当用户忘记密码时,他们可以输入注册的电子邮件,并通过电子邮件接收密码重置链接

职位:

params=电子邮件和重定向链接 ()

我可以通过电子邮件发送密码重置链接,但当我单击链接或电子邮件中的“更改我的密码”时,它会跳转到带有令牌的重定向地址

它显示“你要找的页面不存在。”

这可能是个错误,但我不知道。我甚至不确定是否应该为重定向链接设置“/密码/编辑”

这是github的相关链接


我是否遗漏了什么,或者应该为重定向链接部分设置不同的地址?

设计令牌验证重置密码功能的流程是, 它有三个API

  • 发送重置密码令牌的post调用
  • 获取身份验证头的get请求
  • 用于更改密码的修补程序调用
  • 在post中,您将发送电子邮件并重定向url,这将调用DesiveTokenAuth::PasswordsController中的create方法,该方法创建重置密码令牌并在电子邮件中发送

    电子邮件中的链接将调用DeviceTokenAuth::PasswordsController的编辑方法,在该方法中,它生成身份验证标头并重定向到您在上一个请求中发送的重定向url,其中这些身份验证标头作为查询字符串(url参数)

    使用这些身份验证标头将请求修补到DevisionTokenAuth::PasswordsController中的更新方法,并将密码和密码确认作为属性


    密码将被更改。

    如上所述,designe_token_auth有三个API调用用于重置密码

    1.发送密码重置电子邮件的POST呼叫 例如:

    请注意,给定的
    重定向\u url
    必须对应于您希望用户用于确认和重置密码的端点

    例如,如果希望重定向到iOS应用程序中的某个位置,请在
    重定向\u URL
    定义中使用该应用程序方案的URL。例如,要在iOS上手动执行此操作:

    curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST https://myapp.com/auth/password -d '{"email":"foo@gmail.com", "redirect_url": "myappStoreAppName://auth/password/edit"}'
    
    2.验证密码重置令牌的GET调用(在电子邮件中单击) 如果这是来自web应用程序,则“重定向到”链接应指向可以填写
    密码
    密码确认
    表单的表单。如果密码重置电子邮件链接指向移动应用程序,则由该应用程序创建密码重置表单

    这一步中最重要的是知道发出请求的客户端将从Rails应用程序返回一个
    访问令牌

    需要保存该访问令牌,因为客户机将在下一个请求中使用该令牌,以便在用户更改密码时对用户进行身份验证

    3.更新用户密码的PUT调用 请注意需要为此PUT调用提供的头值。这样可以确保我们的用户(现在已通过身份验证的用户)有权执行密码更改,并确保我们的用户即使在更改密码后也可以继续保持身份验证

    例如,通过卷曲:

    curl -v -H 'Content-Type: application/json' -H 'uid: foo@gmail.com' -H 'client: U9FIDbiDbYVulsi1dBpxOQ' -H 'access-token: JbGQi97FTAwsW4n6SZ9aYQ'  -H 'Accept: application/json' -X PUT https://myapp.com/auth/password -d '{"password": "foobar", "password_confirmation": "foobar"}'
    

    我发现它会生成发送到邮件地址的密码重置链接,即使我将重定向url设置为任何内容。(像google.com)但是,每次我点击电子邮件中的“更改密码”链接时,它都会显示“你要找的页面不存在。”错误页面,有什么办法可以解决吗?你能发布你的路线吗。。!我已经为此浪费了整整一天的时间,我也希望你能给我一个指导。
    curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST https://myapp.com/auth/password -d '{"email":"foo@gmail.com", "redirect_url": "myappStoreAppName://auth/password/edit"}'
    
    GET /auth/password/edit
    Params: 'password_reset_token', 'redirect_url'
    
    E.g. via our iOS app would produce an email link like this: https://myapp.com/auth/password/edit?config=default&redirect_url=myappStoreName%3A%2F%2Fauth%2Fpassword%2Fedit&reset_password_token=Qv6mkLuoy9zN-Y1pKghB
    
    PUT /auth/password
    Head: 'uid: VALUE', 'client: VALUE', 'access-token: VALUE', 'token-type: Bearer'
    Params: 'password', 'password_confirmation'
    
    curl -v -H 'Content-Type: application/json' -H 'uid: foo@gmail.com' -H 'client: U9FIDbiDbYVulsi1dBpxOQ' -H 'access-token: JbGQi97FTAwsW4n6SZ9aYQ'  -H 'Accept: application/json' -X PUT https://myapp.com/auth/password -d '{"password": "foobar", "password_confirmation": "foobar"}'