繁体   English   中英

默认验证消息 ASP.NET Core

[英]Default validation message ASP.NET Core

我创建了自定义密码验证器来使用我自己的正则表达式检查输入的密码。 但是当我测试它时,首先显示默认错误消息,然后是我的。 而且我不明白如何删除此默认消息,因此只剩下我的消息。 我的消息是“您的密码不正确”。

错误信息: 我的默认消息

并且有一个代码:

验证器:

    {

        public Task<IdentityResult> ValidateAsync(UserManager<User> manager, User user, string password)
        {
            List<IdentityError> errors = new List<IdentityError>();

            string pattern = "^(?=^.{12,}$)(?=.*[0-9]+)(?=.*[A-Z]+)(?=.*[a-z]+)(?=.*[&@^$%]+).*$";

            if (!Regex.IsMatch(password, pattern))
            {
                return Task.FromResult(IdentityResult.Failed(new IdentityError
                {
                    Code = "IncPass",
                    Description = "Your password is incorrect"
                })) ;
            }
            return Task.FromResult(IdentityResult.Success);
        }
    }

Controller 方法

 [HttpGet]
        public IActionResult Register()
        {
            return View();
        }
        [HttpPost]
        public async Task<IActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                User user = new User { Email = model.Email, UserName = model.Email, Year = model.Year };
                var result = await _userManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    foreach (var error in result.Errors)
                    {
                        ModelState.AddModelError(string.Empty, error.Description);
                    }
                }
            }
            return View(model);
        }

启动

  services.AddIdentity<User, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationContext>()
                .AddDefaultTokenProviders()
                .AddPasswordValidator<CustomPasswordValidator>();

只要您调用AddIdentity ,就会注册默认密码验证器,即使您提供了额外的密码验证器也是如此。

您需要在调用AddIdentity之前注册您的密码验证器,如下所示:

services.TryAddScoped<IPasswordValidator<User>, CustomPasswordValidator>();
services.AddIdentity<User, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationContext>()
            .AddDefaultTokenProviders();

如您所见,您不再需要AddPasswordValidator调用。

默认PasswordValidator取决于名为IdentityErrorDescriber的 class 。

https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Extensions.Core/src/PasswordValidator.cs

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.identityerrordescriber?view=aspnetcore-3.1

尽管看起来可以覆盖实现,但这似乎是为了本地化,可能难以实现您的意图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM