Asp.net mvc 在MVC4中更改密码

Asp.net mvc 在MVC4中更改密码,asp.net-mvc,authentication,simplemembership,Asp.net Mvc,Authentication,Simplemembership,我正在构建ASP.NETMVC4应用程序。我使用简单的成员资格提供程序来管理系统内的身份验证和授权。在这种方法中,更改密码的方法有哪些。我发现了一个ChangePassword方法,它需要三个参数来操作,包括原始密码 有没有其他方法可以在不知道原始密码的情况下覆盖/更改用户的密码?当用户想要更改其密码时,会使用ChangePassword,而当前密码是允许这种情况发生的证据(想想更改密码屏幕) 我认为最直接的方法是调用WebSecurity.GeneratePasswordResetToken(

我正在构建ASP.NETMVC4应用程序。我使用简单的成员资格提供程序来管理系统内的身份验证和授权。在这种方法中,更改密码的方法有哪些。我发现了一个ChangePassword方法,它需要三个参数来操作,包括原始密码


有没有其他方法可以在不知道原始密码的情况下覆盖/更改用户的密码?

当用户想要更改其密码时,会使用ChangePassword,而当前密码是允许这种情况发生的证据(想想更改密码屏幕)

我认为最直接的方法是调用WebSecurity.GeneratePasswordResetToken()并将结果与新密码一起传递到WebSecurity.ResetPassword

  var token = WebSecurity.GeneratePasswordResetToken("UserName");
  var result = WebSecurity.ResetPassword(token, "NewPassword");
[AllowAnonymous]
[HttpPost]
public ActionResult ResetPasswordConfirmation(ResetPasswordConfirmModel model)
{
    if (WebSecurity.ResetPassword(model.Token, model.NewPassword))
    {
        return RedirectToAction("PasswordResetSuccess");
    }
    return RedirectToAction("PasswordResetFailure");
}

有一篇关于这个问题的详细文章。它还包括您可以下载的源代码

此示例使用电子邮件向用户发送URL,以单击进行密码重置。这比让用户直接在网站上输入旧密码和新密码更安全,因为这是对用户的另一种验证。这缓解了有人获得用户密码并通过更改密码将其锁定的情况。这也允许用户在忘记密码的情况下重置密码

  var token = WebSecurity.GeneratePasswordResetToken("UserName");
  var result = WebSecurity.ResetPassword(token, "NewPassword");
[AllowAnonymous]
[HttpPost]
public ActionResult ResetPasswordConfirmation(ResetPasswordConfirmModel model)
{
    if (WebSecurity.ResetPassword(model.Token, model.NewPassword))
    {
        return RedirectToAction("PasswordResetSuccess");
    }
    return RedirectToAction("PasswordResetFailure");
}
发送带有链接的电子邮件的代码如下所示

[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的链接,该API接受令牌作为传入的id。当他们点击链接时,它会点击这个方法

[AllowAnonymous]
public ActionResult ResetPasswordConfirmation(string Id)
{
    ResetPasswordConfirmModel model = new ResetPasswordConfirmModel() { Token = Id };
    return View(model);
}
此操作从查询字符串获取令牌,并将其放入ResetPasswordConfirmationModel中,该模型将传递给允许用户输入新密码的视图。新密码输入两次,以确保他们正确输入,这在页面上是验证。当他们提交此信息时,他们会被带到此操作的后期版本,该版本实际上会重置密码

  var token = WebSecurity.GeneratePasswordResetToken("UserName");
  var result = WebSecurity.ResetPassword(token, "NewPassword");
[AllowAnonymous]
[HttpPost]
public ActionResult ResetPasswordConfirmation(ResetPasswordConfirmModel model)
{
    if (WebSecurity.ResetPassword(model.Token, model.NewPassword))
    {
        return RedirectToAction("PasswordResetSuccess");
    }
    return RedirectToAction("PasswordResetFailure");
}

你不是在寻找密码重置功能吗?如果用户不知道原始密码,他们是如何登录的?如果他们没有登录,他们到底要更改哪个用户的密码?虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@skrrgwasme-很好的观点。我已在最新答覆中加入有关详情。