【问题标题】:Rails devise_token_auth gem, how do I set password reset link?Rails devise_token_auth gem,如何设置密码重置链接?
【发布时间】:2016-10-08 03:31:03
【问题描述】:

我在使用此 gem 的密码重置功能时遇到问题。 https://github.com/lynndylanhurley/devise_token_auth

这是来自文档。

/password/edit     GET  

"通过密码重置令牌验证用户。此路由是目的地 密码重置确认的 URL。这条路线必须包含 reset_password_token 和 redirect_url 参数。这些值将被设置 自动由生成的确认电子邮件 密码重置请求。”

当用户忘记密码时,可输入注册邮箱,并通过邮箱收到密码重置链接。

发帖:https://example.com/api/auth/password

params = 电子邮件和重定向链接 (https://example.com/api/auth/password/edit)

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

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

这可能是路线错误之类的,但我不知道。我什至不确定是否应该为重定向链接设置“/password/edit”。

这是github的相关链接 https://github.com/lynndylanhurley/devise_token_auth/issues/604

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

【问题讨论】:

  • 我已经为此浪费了一整天的时间,我也希望有一个指南。

标签: ruby-on-rails ruby device


【解决方案1】:

如上所述,devise_token_auth 具有三个用于重置密码的 API 调用。

1。发送密码重置电子邮件的 POST 调用

 POST /auth/password
 Params: 'email', 'redirect_url'

例如:

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": "https://myapp.com/auth/sign_in"}'

请注意,给定的redirect_url 必须与您希望用户确认和重置密码的端点相对应。

例如如果想要重定向到 iOS 应用程序中的某个位置,请在 redirect_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 调用(在电子邮件中单击)

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

如果来自网络应用程序,“redirect_to”链接应指向可以填写passwordpassword_confirmation 表单的表单。如果密码重置电子邮件链接指向移动应用程序,则由该应用程序创建密码重置表单。

在此步骤中最重要的是知道发出请求的客户端将从 Rails 应用程序返回 Access-Token HEADER。

需要保存此访问令牌,因为客户端将在下一次请求中使用它来保持用户身份验证,同时用户更改密码。

3。更新用户密码的 PUT 调用

PUT /auth/password
Head: 'uid: VALUE', 'client: VALUE', 'access-token: VALUE', 'token-type: Bearer'
Params: 'password', 'password_confirmation'

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

例如通过卷曲:

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"}'

【讨论】:

    【解决方案2】:

    devise_token_auth 重置密码功能的流程是, 它有三个 API

    1. 发送重置密码令牌的电话后,
    2. 获取身份验证标头的获取请求
    3. 更改密码的补丁调用

    在帖子中,您将发送电子邮件和重定向 url,这将调用 DeviseTokenAuth::PasswordsController 中的 create 方法,该方法创建一个重置密码令牌并将其发送到电子邮件中。

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

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

    密码将被更改。

    【讨论】:

    • 我发现即使我将重定向 url 设置为任何内容,它也会生成发送到邮件地址的密码重置链接。 (如 google.com)但是,每次我点击电子邮件中的更改密码链接时,它都会显示“您要查找的页面不存在”。错误页面,有什么解决办法吗?
    • 你能发布你的路线吗..!
    猜你喜欢
    • 2012-08-29
    • 2017-04-05
    • 2012-09-16
    • 2015-05-14
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多