2016-06-08 108 views
3

我使用这个宝石的密码重置功能有问题。 https://github.com/lynndylanhurley/devise_token_authRails devise_token_auth gem,我该如何设置密码重置链接?

这是来自文件。

/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

我已经失去了整整一天,我会很感激这个指导。 – Kelseydh

回答

2

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

  1. 一个帖子号召发送重置密码令牌,
  2. 为获得认证头的GET请求
  3. 补丁要求更改密码

在发布后,您将发送电子邮件和重定向url,这将调用DeviseTokenAut中的create方法h :: PasswordsController,它创建一个重置密码令牌并通过电子邮件发送它。

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

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

密码将被更改。

+0

我发现它会生成密码重置链接发送到邮件地址,即使我设置重定向url为任何东西。 (如google.com)但是,每次我点击我的电子邮件中的更改密码链接时,它都会显示“您正在查找的网页不存在。”错误页面,任何想法来解决这个问题? –

+0

你可以发布你的路线..! –

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":"[email protected]", "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":"[email protected]", "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。

此Access-Token需要保存,因为这是客户端将在下一个请求中使用的内容,以保证用户在用户更改密码时进行身份验证。

3. PUT调用来更新用户的密码

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

注意,需要为这个PUT通话将被提供的水头值。这些确保我们(现在通过身份验证的用户)有权执行密码更改,并确保我们的用户即使在更改密码后仍能继续保持身份验证状态。

E.g.通过卷曲:

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