ASP.NET 核心身份中仅允许使用数字密码

Allow only numeric password in ASP.NET Core identity

我对 ASP.NET 核心身份有疑问。在我设计的系统中,我需要允许用户只输入一个数字密码,但我不知道 ASP.NET Core identity 怎么可能。我尝试了所有这些,但 none 没有奏效。

services.AddIdentityCore<IdentityUser>(setupAction =>
        {
            setupAction.Password.RequireDigit = true;
            setupAction.Password.RequiredUniqueChars = 2;
            setupAction.Password.RequireLowercase = false;
            setupAction.Password.RequireNonAlphanumeric = true;
            setupAction.Password.RequireUppercase = false;
            setupAction.Password.RequiredLength = 0;
            setupAction.SignIn.RequireConfirmedEmail = false;
            setupAction.SignIn.RequireConfirmedPhoneNumber = false;
        }).
        AddPasswordValidator<CustomPasswordValidator>().
        AddEntityFrameworkStores<TContext>().
        AddSignInManager().
        AddUserManager<UserManager<IdentityUser>>();

此外,我写了一个新的密码验证器并将其注册到 DI,但它仍然不起作用

 AddPasswordValidator<CustomPasswordValidator>()

这是我的自定义密码验证器

public class CustomPasswordValidator : IPasswordValidator<User>
{
    public Task<IdentityResult> ValidateAsync(UserManager<User> manager, User user, string password)
    {
        Regex optionalAlphabetAndNumbersRegex = new Regex("[^A-Za-z0-9]+.{8}");

        if (optionalAlphabetAndNumbersRegex.IsMatch(password))
            return Task.FromResult(IdentityResult.Success);
        else
            return Task.FromResult(IdentityResult.Failed(new IdentityError
            {
                Code = "Invalid Password",
                Description = "invalid password. password must be numeric or alphabetical or both"
            }));
    }
}

我知道“只有数字密码”是不安全和强度的,但在这个系统中,我需要它。

请帮帮我!

代码中有两个问题:

  1. 第一个

    setupAction.Password.RequireNonAlphanumeric = 真;

这将确保您需要添加特殊字符(非字母数字)。

  1. 第二个

    Regex optionalAlphabetAndNumbersRegex = new Regex("[^A-Za-z0-9]+.{8}");

正则表达式要求必须使用字母数字。

如果您只需要您在要求中所述的号码,请更正这些

最后,我发现我的代码有什么问题并修复了它。我什至不需要 CustomPasswordValidator,只需设置这些 IdentityOptions 即可正常工作。

 public IdentityBuilder AddIdentityService<TUser, TKey, TContext>() where TUser : IdentityUser<TKey> where TContext : DbContext where TKey : IEquatable<TKey>
    {
        return _services.AddIdentityCore<TUser>(setupAction =>
        {
            setupAction.Password.RequireDigit = true;
            setupAction.Password.RequiredUniqueChars = 0;
            setupAction.Password.RequireLowercase = false;
            setupAction.Password.RequireNonAlphanumeric = false;
            setupAction.Password.RequireUppercase = false;
            setupAction.Password.RequiredLength = 3;
            setupAction.SignIn.RequireConfirmedEmail = false;
            setupAction.SignIn.RequireConfirmedPhoneNumber = false;
        }).
        AddEntityFrameworkStores<TContext>().
        AddSignInManager().
        AddUserManager<UserManager<TUser>>();
    }