在核心标识中仅允许数字密码 ASP.NET



我对 ASP.NET 核心身份有问题。在我设计的系统中,我需要允许用户只输入一个数字密码,但我不知道如何使用 ASP.NET 核心身份。我尝试了所有这些,但没有一个不起作用。

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"
}));
}
}

我知道"只有数字密码"不安全和强大,但在这个系统中,我需要它。

请帮帮我!

最后,我发现了我的代码出了什么问题并修复了它。我什至不需要那个CustomPasswordValidator,只需设置这些身份选项即可正常工作。

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>>();
}

代码中有两个问题:

  1. 第一

    setupAction.Password.RequireNonAlphabetnumeric = true;

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

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

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

如果您仅需要要求中规定的数字,请更正这些内容

相关内容

  • 没有找到相关文章

最新更新