public static IdentityBuilder AddCustomPasswordValidator<TUser>(this IdentityBuilder builder, PasswordValidateOptions options) where TUser : class
{
if (!options.EmailInPassword)
builder.AddPasswordValidator<EmailInPasswordValidator>();
if (!options.UserNameInPassword)
builder.AddPasswordValidator<UserNameInPasswordValidator>();
if (!options.LastPasswordsInPassword)
builder.AddPasswordValidator<LastPasswordsInPasswordValidator>();
return builder ;
}
在上面的方法中,我不能通过 prop 或构造函数将参数传递给 IPasswordvalidator 实现。
例如LastPasswordValidator,我想根据选项中的密码计数进行配置,但AddPasswordValidator不获取任何数据。
public class LastPasswordsInPasswordValidator:IPasswordValidator<ApplicationUser>
{
private int LastPasswordsCount { get; set; }
public LastPasswordsInPasswordValidator(IPasswordHasher<ApplicationUser> passwordHasher)
{
this.passwordHasher = passwordHasher;
}
}
这就是我想要的
builder.AddPasswordValidator<LastPasswordsInPasswordValidator>(options);
但是 AddPasswordValidator 没有重载!!
启动配置服务。
Ioptions 模式让生活更轻松,++Core 设计模式 当我们需要跨应用程序的数据时,无需通过属性/构造函数传递数据,Ioptions 为您保存它
services.Configure<PasswordValidateOptions>(Configuration.GetSection("PasswordValidateOptions"));
IpasswordValidator的实现
private PasswordValidateOptions PasswordValidateOptions { get; set; }
public LastPasswordsInPasswordValidator(IOptions<PasswordValidateOptions> options)
{
this.PasswordValidateOptions = options.Value;
}