核心aspnet身份密码验证器基于配置

时间:2017-08-14 23:54:13

标签: .net c#-4.0 dependency-injection asp.net-core

 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,我想根据no配置。密码的数量来自选项,但AddPasswordValidator不会获取任何数据。

public class LastPasswordsInPasswordValidator:IPasswordValidator<ApplicationUser>
{



    private int LastPasswordsCount { get; set; }

    public LastPasswordsInPasswordValidator(IPasswordHasher<ApplicationUser> passwordHasher)
    {
        this.passwordHasher = passwordHasher;
    }
}

这就是我想要的

 builder.AddPasswordValidator<LastPasswordsInPasswordValidator>(options);    

但是AddPasswordValidator没有重载。!!!

1 个答案:

答案 0 :(得分:0)

启动配置服务。

Ioptions模式让生活更轻松,++核心设计模式 当我们需要跨应用程序的数据时,无需通过properties / Constructor传递数据,Ioptions为您提供

 services.Configure<PasswordValidateOptions>(Configuration.GetSection("PasswordValidateOptions"));

IpasswordValidator的实施

private PasswordValidateOptions PasswordValidateOptions { get; set; }
        public LastPasswordsInPasswordValidator(IOptions<PasswordValidateOptions> options)
        {
            this.PasswordValidateOptions = options.Value;
        }