基于配置的核心 aspnet 标识密码验证器


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;
}

最新更新