繁体   English   中英

raails devise_token_auth gem,如何设置密码重置链接?

[英]Rails devise_token_auth gem, how do I set password reset link?

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

这来自文件。

/password/edit     GET  

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

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

POST: 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

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

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

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

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

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

使用这些身份验证标头将请求修补到DeviseTokenAuth :: PasswordsController中的update方法,并使用password和password_confirmation作为属性。

密码将被更改。

如上所述,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

如果这是来自Web应用程序,则“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"}'

暂无
暂无

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

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