簡體   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