我正在構建ASP.NET MVC 4應用程序。我使用簡單成員資格提供程序來管理系統內的身份驗證和授權。在這種方法中更改密碼有哪些方法。我發現了一個ChangePassword方法,它需要三個參數,包括原始密碼才能運行。更改MVC中的密碼4
有沒有其他方法可以在不知道原始密碼的情況下覆蓋/更改用戶的密碼?
我正在構建ASP.NET MVC 4應用程序。我使用簡單成員資格提供程序來管理系統內的身份驗證和授權。在這種方法中更改密碼有哪些方法。我發現了一個ChangePassword方法,它需要三個參數,包括原始密碼才能運行。更改MVC中的密碼4
有沒有其他方法可以在不知道原始密碼的情況下覆蓋/更改用戶的密碼?
當用戶想要更改密碼時使用ChangePassword,並且當前密碼是允許發生這種情況的證據(請考慮更改密碼屏幕)。
我認爲最直接的方法是調用WebSecurity.GeneratePasswordResetToken()並將結果和新密碼一起傳遞給WebSecurity.ResetPassword。
var token = WebSecurity.GeneratePasswordResetToken("UserName");
var result = WebSecurity.ResetPassword(token, "NewPassword");
非常感謝!!!! – Bartosz
有關於how to implement password reset/change with SimpleMembership in MVC 4 here的詳細文章。它還包括可以下載的源代碼。
本示例使用電子郵件向用戶發送URL以單擊以進行密碼重置。這比僅僅讓用戶直接在網站上輸入舊密碼和新密碼更安全,因爲它是用戶的另一種驗證。這可以緩解某人獲取用戶密碼並通過更改密碼將其鎖定的情況。這也允許用戶在忘記密碼的情況下重置密碼。
通過鏈接發送電子郵件的代碼看起來像這樣。
[AllowAnonymous]
[HttpPost]
public ActionResult ResetPassword(ResetPasswordModel model)
{
string emailAddress = WebSecurity.GetEmail(model.UserName);
if (!string.IsNullOrEmpty(emailAddress))
{
string confirmationToken =
WebSecurity.GeneratePasswordResetToken(model.UserName);
dynamic email = new Email("ChngPasswordEmail");
email.To = emailAddress;
email.UserName = model.UserName;
email.ConfirmationToken = confirmationToken;
email.Send();
return RedirectToAction("ResetPwStepTwo");
}
return RedirectToAction("InvalidUserName");
}
這將創建一個有一個鏈接到一個Web API接受令牌作爲傳入的ID的電子郵件。當他們點擊鏈接,它擊中這個方法。
[AllowAnonymous]
public ActionResult ResetPasswordConfirmation(string Id)
{
ResetPasswordConfirmModel model = new ResetPasswordConfirmModel() { Token = Id };
return View(model);
}
這個動作從查詢字符串獲取令牌,並把它傳遞給它允許用戶輸入新的密碼視圖的ResetPasswordConfirmationModel。輸入新密碼兩次以確保它們輸入正確,並在頁面上進行驗證。當他們提交這些信息時,他們被帶到實際重置密碼的POST操作。
[AllowAnonymous]
[HttpPost]
public ActionResult ResetPasswordConfirmation(ResetPasswordConfirmModel model)
{
if (WebSecurity.ResetPassword(model.Token, model.NewPassword))
{
return RedirectToAction("PasswordResetSuccess");
}
return RedirectToAction("PasswordResetFailure");
}
儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/10490453) – skrrgwasme
@skrrgwasme - 好點。我已在我更新的答案中添加了相關詳細信息。 –
難道你不想找密碼重置功能嗎?如果用戶不知道原始密碼,他們是如何登錄的?如果他們沒有登錄,那麼他們的密碼是否會改變? – ProfK