изменение пароля в MVC 4
Я строю ASP.NET приложение MVC 4. Я использую простой поставщик членства для управления аутентификацией и авторизацией в системе. Каковы способы изменения пароля при таком подходе. Я нашел метод ChangePassword, который принимает три параметра, включая исходный пароль, для работы.
есть ли другой способ, чтобы переопределить/изменить пароль для пользователя, не зная исходный пароль?
2 ответов
ChangePassword используется, когда пользователь хочет изменить свой пароль - и текущий пароль является их доказательством, чтобы это произошло (думаю, изменить экран пароля).
Я думаю, что самый прямой способ сделать это-вызвать WebSecurity.GeneratePasswordResetToken () и передать результат в WebSecurity.ResetPassword, вместе с новым паролем.
var token = WebSecurity.GeneratePasswordResetToken("UserName");
var result = WebSecurity.ResetPassword(token, "NewPassword");
есть подробная статья о как реализовать сброс/изменение пароля с помощью SimpleMembership в MVC 4 здесь. Он также включает исходный код, который вы можете скачать.
в этом примере используется электронная почта для отправки 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");
}
это создает электронное письмо, которое имеет ссылку на веб-API, который принимает маркер в качестве идентификатора, который передается. Когда они нажимают на ссылку, она попадает в этот метод.
[AllowAnonymous]
public ActionResult ResetPasswordConfirmation(string Id)
{
ResetPasswordConfirmModel model = new ResetPasswordConfirmModel() { Token = Id };
return View(model);
}
это действие получает токен от строка запроса и помещает ее в ResetPasswordConfirmationModel, который передается в представление, которое позволяет пользователю ввести новый пароль. Новый пароль вводится дважды, чтобы убедиться, что они ввели его правильно, что проверить на странице. Когда они отправляют эту информацию, они принимаются к почтовой версии этого действия, которое фактически сбрасывает пароль.
[AllowAnonymous]
[HttpPost]
public ActionResult ResetPasswordConfirmation(ResetPasswordConfirmModel model)
{
if (WebSecurity.ResetPassword(model.Token, model.NewPassword))
{
return RedirectToAction("PasswordResetSuccess");
}
return RedirectToAction("PasswordResetFailure");
}