文章目錄
ASP.NET Identity 2 手動檢查 Token 有效性
之前筆記 改 ASP.NET Identity 2 的 Token 時效 紀錄到可以調整 ASP.NET Identity 產生出 Token 的有效時間,而其中也提到可以參考 ForgotPassword 的寫法 (Forgotpasswrod –> 產生含有 token 的 reset password 連結 –> 使用 link 來 reset password)
整體功能是沒有問題的,只是使用體驗個人覺得稍嫌不足:link 包含 token,卻不是在開啟連結時就驗證 token 有效性,而是在填完相關資料才驗證,個人覺得既然 token 無效何必讓 user 多花那個時間填完資料才告訴 user token 無效,所以就來看可以如何調整吧
原始流程
填完資料
送出後才驗證 Token 正確性
改善後流程
避免 Token 無效仍讓 user 浪費時間填寫資料
填寫資料前先驗證 Token
初次開啟連結時 Token 仍有效
輸入完成送出後才失效
修改方式
開啟 Controllers –> AccountController.cs
修改 ResetPassword 方法
修改前
[AllowAnonymous] public ActionResult ResetPassword(string code) { return code == null ? View("Error") : View(); }
將 userid 也加入接放參數
public ActionResult ResetPassword(string code, string userId)
使用 UserManager.VerifyUserToken 驗證 Token 有效性
UserManager.VerifyUserToken(userId, "ResetPassword", code)
Token 無效導向自訂頁面(非必要,但可以讓訊息更容易理解)
return View("InvalidToken");
完整程式碼
[AllowAnonymous] public ActionResult ResetPassword(string code, string userId) { if (code == null || !UserManager.VerifyUserToken(userId, "ResetPassword", code)) { return View("InvalidToken"); } return View(); }
心得
這個需求並不是 user 提出的,而是開發階段我自己測試時覺得使用者體驗不佳,決定自行加上的,站在 user 的角色:我相信沒有人想要填完一堆內容後再告訴我驗證失敗,如果 token 過期是發生在我填寫資料的過程也就算了,但經過修改後至少可以避免掉 token 早就過期還讓 user 填資料的情境
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。