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"
}));
}
}
我知道“只有数字密码”是不安全和强度的,但在这个系统中,我需要它。
请帮帮我!
代码中有两个问题:
第一个
setupAction.Password.RequireNonAlphanumeric = 真;
这将确保您需要添加特殊字符(非字母数字)。
第二个
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>>();
}
我对 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"
}));
}
}
我知道“只有数字密码”是不安全和强度的,但在这个系统中,我需要它。
请帮帮我!
代码中有两个问题:
第一个
setupAction.Password.RequireNonAlphanumeric = 真;
这将确保您需要添加特殊字符(非字母数字)。
第二个
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>>();
}