我在使用此gem的密码重置功能时遇到问题。 https://github.com/lynndylanhurley/devise_token_auth
这是来自文件。
/password/edit GET
"通过密码重置令牌验证用户。这条路线是目的地 密码重置确认的URL。此路线必须包含 reset_password_token和redirect_url params。将设置这些值 自动生成的确认电子邮件 密码重置请求。"
当用户忘记他们的密码时,他们可以输入他们的注册电子邮件,他们将通过电子邮件收到密码重置链接。
POST:https://example.com/api/auth/password
params =电子邮件和重定向链接 (https://example.com/api/auth/password/edit)
我可以通过电子邮件发送密码重置链接,但是当我点击链接或"更改我的密码"在电子邮件中,它会使用令牌跳转到重定向地址。
它显示了"您正在寻找的页面不存在。"
这可能是路线错误或其他什么,但我不知道。我甚至不确定是否应该设置" /密码/编辑"用于重定向链接。
这是github的相关链接 https://github.com/lynndylanhurley/devise_token_auth/issues/604
我错过了什么,或者我应该为重定向链接部分设置不同的地址?
答案 0 :(得分:2)
devise_token_auth重置密码功能的流程是, 它有三个API
在帖子中,您将发送电子邮件和重定向网址,这将在DeviseTokenAuth :: PasswordsController中调用create方法,该方法会创建重置密码令牌并将其发送到电子邮件中。
电子邮件中的链接将调用DeviseTokenAuth :: PasswordsController的编辑方法,在其中生成身份验证标头并重定向到您在上一个请求中发送的重定向网址,并将这些身份验证标头作为查询字符串(网址参数) )
使用这些身份验证标头将请求修补到DeviseTokenAuth :: PasswordsController中的update方法,并使用password和password_confirmation作为属性。
密码将被更改。
答案 1 :(得分:1)
如上所述,devise_token_auth有三个API调用来重置密码。
POST /auth/password
Params: 'email', 'redirect_url'
E.g:
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
必须与您希望用户用于确认和重置其密码的端点相对应。
E.g。如果想要重定向到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"}'
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'链接应指向可填写password
和password_confirmation
表单的表单。如果密码重置电子邮件链接指向移动应用程序,则可以通过该应用程序创建密码重置表单。
此步骤中最重要的是知道发出请求的客户端将从Rails应用程序返回Access-Token
HEADER。
需要保存此访问令牌,因为它是客户端在下一次请求中将用户在用户更改密码时保持用户身份验证的内容。
PUT /auth/password
Head: 'uid: VALUE', 'client: VALUE', 'access-token: VALUE', 'token-type: Bearer'
Params: 'password', 'password_confirmation'
请注意需要为此PUT调用提供的HEAD值。这些确保我们(现已通过身份验证的用户)有权执行密码更改,并确保即使在更改密码后我们的用户仍可继续进行身份验证。
E.g。通过卷曲:
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"}'