ASP.NET身份更改密码验证错误否定



我使用的是ASP。. NET MVC +实体框架和标识

我正在撕扯我的头发,因为大约10%的用户在更改密码时遇到了问题。我主要使用的是来自项目生成的股票代码。唯一的变化是用户重定向取决于登录成功后的角色

大多数用户都有一个无缝的更改密码的体验,但对于大约10%的用户,当他们点击提交时,它会给他们一个错误,密码不正确。

原来它实际上已经更新了密码,但由于错误消息,他们继续尝试使用原始密码。我不能在我的开发机器上复制它来调试,但我已经在我的客户端实践中看到了它

有没有人看到代码的任何问题或以前遇到过这种情况?

    [Authorize(Roles = "Administrator, ...")]
    public ActionResult ChangePassword()
    {
        return View();
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    [Authorize(Roles="Administrator", ...)]
    public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        var result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
        if (result.Succeeded)
        {
            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
            if (user != null)
            {
                await SignInManager.SignInAsync(user, isPersistent: true, rememberBrowser: false);
            }
            if (User.IsInRole("Admin"))
            {
                return RedirectToAction("Index", "Dashboard", new      Area="Admin"});
            }
                // if all else fails redirect the user back to the default web site.
            return Redirect("http://www.example.com");
        }
        AddErrors(result);
        return View(model);
    }

编辑-下面的评论是模型。它们是自动生成的样板代码:

public class ChangePasswordViewModel
{
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Current password")]
    public string OldPassword { get; set; }
    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "New password")]
    public string NewPassword { get; set; }
    [DataType(DataType.Password)]
    [Display(Name = "Confirm new password")]
    [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

用户和密码在代码中设置:

String password = "password";
String username = "user1";
var user = new ApplicationUser
{
        UserName = username,
        Email = "useremail.com",
};
var result = UserManager.Create(user, password);
if (result == IdentityResult.Success)
{
    UserManager.AddToRole(user.Id, "Admin");
}

这可能更适合作为注释,但格式会让我发疯,所以我打算把它放在这里。下面的代码将在OWIN管道中启用额外的日志记录。

<system.diagnostics>
  <switches>
    <add name="Microsoft.Owin" value="Verbose" />
  </switches>
</system.diagnostics>

如果这还不够,或者不适合你,看看下面的帖子,它添加了更多的东西:这里

相关内容

  • 没有找到相关文章

最新更新