如何创建从数据库或控制器检索验证选项的 PasswordValidator?

How to create a PasswordValidator that retrieves validation options from a database or controller?

我正在使用 ASP.NET Identity Core 2.2.1 建立一个 MVC.NET 4.5 网站。

我的目标是能够在网站视图中编辑密码验证选项并将这些验证规则保存在数据库中。我希望密码验证器随后使用这些规则在注册时验证密码。它应该能够在相同的 运行 时间内对不同的注册页面使用不同的验证规则集。

PasswordValidator 的默认实现在 identityConfig 文件中。我知道您可以为自定义验证规则创建自定义密码验证器(即使用正则表达式进行验证)。

我如何创建自定义 PasswordValidator 以从数据库中检索验证规则(通过自定义 ValidationRulesModel 或正则表达式字符串)或让控制器传入规则?
这是可能的还是我需要研究其他解决方案?

谢谢!

首先您可以创建一个单独的 class CustomPasswordValidator,它继承自 IIdentityValidator<string>。然后,您可以在 ValidateAsync(T) 方法中实现验证逻辑。您将从数据库中检索规则并根据传递的字符串参数检查它们。

那么我想你正在使用一种从 UserManager 派生的 ApplicationUserManager class。给ApplicationUserManager添加一个IIdentityValidator<string>类型的构造函数参数,赋值给PasswordValidator 属性.

ApplicationUserManager 使用 CustomPasswordValidator 实例作为参数创建的实例将根据数据库规则验证您的密码。

请参阅 UserManagersource 以查看 PasswordValidator 属性 的确切调用时间。