我对 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>>();
}
代码中有两个问题:
-
第一
setupAction.Password.RequireNonAlphabetnumeric = true;
这将确保您需要添加特殊字符(非字母数字(。
-
秒
Regex optionalAlphabetAndNumbersRegex = new Regex("[^A-Za-z0-9]+.{8}"(;
正则表达式需要必须使用字母数字。
如果您仅需要要求中规定的数字,请更正这些内容