更改密码时如何重用身份密码验证
How to reuse identity password validation when changing passwords
我正在使用身份(UserManager、RoleManager)开发一个asp.net核心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 提供了一种验证方法?
对于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
中的验证结果。
我通过使用 UserManager 的 ChangePasswordAsync 方法找到了解决方案,它检查密码验证策略:
var result = await _userManager.ChangePasswordAsync(usuario, model.ContraseñaActual, model.ContraseñaNueva);
之后,检查布尔值 属性 result.Succeeded 和 result.Errors 集合,我可以根据验证策略验证消息错误。
同时感谢陶周的替代帮助
我正在使用身份(UserManager、RoleManager)开发一个asp.net核心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 提供了一种验证方法?
对于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
中的验证结果。
我通过使用 UserManager 的 ChangePasswordAsync 方法找到了解决方案,它检查密码验证策略:
var result = await _userManager.ChangePasswordAsync(usuario, model.ContraseñaActual, model.ContraseñaNueva);
之后,检查布尔值 属性 result.Succeeded 和 result.Errors 集合,我可以根据验证策略验证消息错误。
同时感谢陶周的替代帮助