如何访问所有ASP.NET Identity 2.0 PasswordValidator属性?

时间:2014-07-05 18:03:44

标签: asp.net-mvc-5 asp.net-identity

我在PasswordValidator上设置了多个属性,但唯一检查的规则是密码长度。

        public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    {
        var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
         // Configure validation logic for passwords
        manager.PasswordValidator = new  PasswordValidator()
        {
            RequiredLength = int.Parse(ConfigurationManager.AppSettings["PasswordRequiredLength"]),
            RequireNonLetterOrDigit = bool.Parse(ConfigurationManager.AppSettings["PasswordRequireNonLetterOrDigit"]),
            RequireDigit = bool.Parse(ConfigurationManager.AppSettings["PasswordRequireDigit"]),
            RequireLowercase = bool.Parse(ConfigurationManager.AppSettings["PasswordRequireLowercase"]),
            RequireUppercase = bool.Parse(ConfigurationManager.AppSettings["PasswordRequireUppercase"])
        };

这几乎是从ASP.NET Identity示例应用程序复制的,除了值来自config而不是硬编码。

当我查看PasswordValidator()的定义时,我看到这些属性都被定义了(当然它编译并运行)。但是,当我测试更改密码时,我注意到只有长度导致验证错误。 AccountController有来自示例的代码:

        IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);

为了更好看,我添加了

    IdentityResult resultPassword = await UserManager.PasswordValidator.ValidateAsync(model.NewPassword);
if (resultPassword.Succeeded)
{
    IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);

我注意到userManager.PasswordValidator属于MinimumLengthValidator类,而不是我认为我们开始使用的PasswordValidator。当然,这解释了行为,但我不知道如何

  1. 正确添加&#34; full&#34; PassordValidator到我的userManager和/或
  2. 访问PassordValidator的属性(例如RequireDigit,RequireUppercase等)
  3. 注意,我试过了

    PasswordValidator myPV = (PasswordValidator)UserManager.PasswordValidator;
    

    导致无法转换类型&#39; Microsoft.AspNet.Identity.MinimumLengthValidator&#39;键入&#39; Microsoft.AspNet.Identity.PasswordValidator&#39;错误。

    最佳, 斯科特

0 个答案:

没有答案