изменение пароля в 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");
}