簡體   English   中英

WebMatrix.WebData.WebSecurity - 如何只通過PasswordResetToken獲取UserName

[英]WebMatrix.WebData.WebSecurity - How can I get UserName by only having PasswordResetToken

我只是想請求幫助以使我的方案工作? 我想使用PasswordResetToken獲取UserName。

這是我的情景。

  1. 我的網站上有一個忘記密碼的功能,它會向用戶發送一個密碼重置電子郵件密碼。
  2. 我只想發送passwordresettoken字符串。
  3. 當用戶單擊鏈接時。 我將只查詢請求[“token”]以獲取用戶名,然后將允許用戶更改密碼和自動登錄。

    這是我的代碼如下:

     public ActionResult ChangePassword() { ChangePasswordModel model = new ChangePasswordModel(); string token=string.Empty; try { token = Request["token"].ToString(); int userId = WebSecurity.GetUserIdFromPasswordResetToken(token); if (userId > 0) { //Get the user object by (userid) //??????????????????? //??????????????????? } else { throw new Exception("The change password token has expired. Please go to login page and click forgot password again."); } } catch { model.HasError = true; ModelState.AddModelError("", "The change password token has expired. Please go to login page and click forgot password again."); } return View(model); } 

先感謝您。

請看本文末尾的注釋: WebSecurity.GeneratePasswordResetToken方法

為方便起見,我會復制相關部分:

如果用戶忘記了密碼,他們可以申請新密碼。 要提供新密碼,請執行以下操作:

  1. 創建一個密碼重置頁面,其中包含一個用戶可以輸入其電子郵件地址的字段。
  2. 當用戶在密碼重置頁面中輸入了他或她的電子郵件地址時,請驗證該電子郵件地址是否代表有效用戶。 如果是,則通過調用GeneratePasswordResetToken(String,Int32)方法生成密碼重置令牌。
  3. 創建指向站點中的確認頁面的超鏈接,該超鏈接將令牌作為查詢字符串參數包含在鏈接的URL中。
  4. 通過電子郵件將鏈接發送給用戶。 當用戶收到電子郵件消息時,他或她可以單擊該鏈接以調用確認頁面。
  5. 創建一個確認頁面,該頁面從URL參數中提取令牌,並允許用戶輸入新密碼。
  6. 當用戶提交新密碼時,請調用ResetPassword(String,String)方法並傳遞密碼重置令牌和新密碼。 如果令牌有效,密碼將被重置。 如果令牌無效(例如,它已過期),則顯示錯誤消息。

突出顯示是我的。 基本上你不需要用戶名。 該框架為您完成了所有繁重的工作。

解決你的評論,我不建議自動登錄用戶。這是一個很好的做法,他們手動記錄檢查這個密碼更改的東西實際上是否有效,而不是發現它不僅僅是下一次。

無論如何,你可以這樣做:

SimpleMembershipProvider provider = (SimpleMembershipProvider)Membership.Provider;
string username = provider.GetUserNameFromId(userId);

參考: GetUserNameFromId

我認為WebSecurity.GetUserIdFromPasswordResetToken(string token)方法WebSecurity.GetUserIdFromPasswordResetToken(string token)你的需要。

更多信息在這里

更新

抱歉,我沒有看到您已經在使用該方法...因此,如果您想獲取用戶名並且您正在使用代碼首次遷移Entity Framework,您可以使用以下LINQ表達式獲取用戶名:

string username = yourDbContext.UserProfiles.FirstOrDefault(up=>up.UserId == userId).Username;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM