2016-06-08 42 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"}'