我正在使用Identity(UserManager,RoleManager)开发一个asp.net core 2.1项目,其密码设置为:
services.Configure<IdentityOptions>(options =>
{
options.Lockout.AllowedForNewUsers = false;
options.Lockout.MaxFailedAccessAttempts = 3;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = true;
options.Password.RequiredLength = 6;
options.Password.RequiredUniqueChars = 1;
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
});
我正在开发自己的更改密码功能,但是我想知道是否有一种方法可以利用以前的密码设置(在前面提到的“启动”设置中)来验证新密码(例如:通过注入服务),避免创建一个新的密码验证器,或者UserManager提供一种验证方法?
答案 0 :(得分:1)
对于IPasswordValidator
,它是由
services.TryAddScoped<IPasswordValidator<TUser>, PasswordValidator<TUser>>();
要访问PasswordValidator<TUser>
,可以尝试
public class HomeController : Controller
{
private readonly UserManager<IdentityUser> _userManager;
private readonly IPasswordValidator<IdentityUser> _passwordValidator;
public HomeController(UserManager<IdentityUser> userManager
, IPasswordValidator<IdentityUser> passwordValidator)
{
_userManager = userManager;
_passwordValidator = passwordValidator;
}
然后通过
验证密码public IActionResult Index()
{
var result = _passwordValidator.ValidateAsync(_userManager, null, "123");
return View();
}
对于PasswordValidator,它不会验证用户,因此您可以传递null。
在var result
中检查验证结果。
答案 1 :(得分:0)
我仅通过使用UserManager的ChangePasswordAsync方法找到了解决方案,它会检查密码验证策略:
var result = await _userManager.ChangePasswordAsync(usuario, model.ContraseñaActual, model.ContraseñaNueva);
然后,检查布尔属性result.Successed和result.Errors集合,我可以根据验证策略来验证消息错误。
还要感谢周涛的替代帮助