【问题标题】:How i Update or Change Paswword in Asp.net Core 2.0我如何在 Asp.net Core 2.0 中更新或更改密码
【发布时间】:2019-05-09 21:34:51
【问题描述】:

我想在我的应用程序中更新密码。 这是我的登录 IAction

控制器

    [HttpGet]
    [AllowAnonymous]
    public async Task<IActionResult> Login(string returnUrl = null)
    {
        // Clear the existing external cookie to ensure a clean login process
        await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);

        ViewData["ReturnUrl"] = returnUrl;
        return View();
    }
[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
    {
        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);

            if (result.Succeeded)
            {

                _logger.LogInformation("User logged in.");
                return RedirectToLocal(returnUrl);
            }
            if (result.RequiresTwoFactor)
            {
                return RedirectToAction(nameof(LoginWith2fa), new { returnUrl, model.RememberMe });
            }
            if (result.IsLockedOut)
            {
                _logger.LogWarning("User account locked out.");
                return RedirectToAction(nameof(Lockout));
            }

            else
            {
                ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                return View(model);
            }
        }
        return View(model);
    }

现在我当前的电子邮件和密码是

电子邮件:john@gmail.com

密码:john@gmail.com123

我想将密码 john@gmail.com123 更新为 john@gmail.com677

【问题讨论】:

  • ASP.Net Identity 有一个 UserManager。
  • 你能告诉我如何更新当前密码吗?

标签: asp.net asp.net-core asp.net-identity entity-framework-core asp.net-core-2.0


【解决方案1】:

如果您使用来自模板(个人用户帐户)的 asp.net core 2.0 身份,您将能够在ChangePassword 视图中更新您的密码,网址为https://localhost:xxxx/Manage/ChangePassword

使用await _userManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword);更新密码。

您将在ManageController.cs 中了解如何完全实现这一目标。

[HttpGet]
    public async Task<IActionResult> ChangePassword()
    {
        var user = await _userManager.GetUserAsync(User);
        if (user == null)
        {
            throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
        }

        var hasPassword = await _userManager.HasPasswordAsync(user);
        if (!hasPassword)
        {
            return RedirectToAction(nameof(SetPassword));
        }

        var model = new ChangePasswordViewModel { StatusMessage = StatusMessage };
        return View(model);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> ChangePassword(ChangePasswordViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        var user = await _userManager.GetUserAsync(User);
        if (user == null)
        {
            throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
        }

        var changePasswordResult = await _userManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword);
        if (!changePasswordResult.Succeeded)
        {
            AddErrors(changePasswordResult);
            return View(model);
        }

        await _signInManager.SignInAsync(user, isPersistent: false);
        _logger.LogInformation("User changed their password successfully.");
        StatusMessage = "Your password has been changed.";

        return RedirectToAction(nameof(ChangePassword));
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 2012-02-17
    • 2013-06-02
    • 2019-05-27
    • 2019-09-08
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多