【问题标题】:Temporarily disable the requirement of a password暂时禁用密码要求
【发布时间】:2026-01-24 02:05:02
【问题描述】:

我正在将用户帐户迁移到密码最少需要 6 个字符的应用程序。

如果我运行以下函数

var result = await UserManager.CreateAsync(newUser, "");

它当然会抱怨密码无效。 有什么方法可以让我暂时忽略密码要求,以便创建我的用户?

注意事项:

private ApplicationUserManager _userManager;
    public ApplicationUserManager UserManager
    {
        get
        {
            if (_userManager == null)
            {
                this._userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
            }
            return _userManager;
        }
        private set
        {
            _userManager = value;
        }
    }

不幸的是,这不起作用:

this._userManager.PasswordValidator = new PasswordValidator
{
    RequiredLength = -1, // I've also tried 0
    RequireNonLetterOrDigit = false,
    RequireDigit = false,
    RequireLowercase = false,
    RequireUppercase = false,
};

正如它所说的“您的密码长度必须至少为 -1 个字符”

【问题讨论】:

  • 实现自己的密码验证器?

标签: c# owin asp.net-identity-2


【解决方案1】:

感谢@trailmax

啊,这个好像没问题!

this._userManager.PasswordValidator = new CustomPasswordValidator();

和验证器...

public class CustomPasswordValidator : IIdentityValidator<string>
{
    public CustomPasswordValidator()
    {
    }

    public Task<IdentityResult> ValidateAsync(string item)
    {
        return Task.FromResult(IdentityResult.Success);
    }
}

【讨论】:

    【解决方案2】:

    使用 IdentityServer4 有一个 IList 的验证器。我不得不暂时禁用,所以我这样做了:

    var pwValidators = userManager.PasswordValidators.ToList();
    userManager.PasswordValidators.Clear(); 
    
    addPaswordResult = await userManager.AddPasswordAsync(user, password);
    
    pwValidators.ForEach(x => userManager.PasswordValidators.Add(x));
    

    【讨论】: