拟在自定义ASP.NET核心身份执行

问题描述:

访问选项的方式,我做了一个自定义的PasswordValidator有自己的一套方案:拟在自定义ASP.NET核心身份执行

class MyValidator : Identity.PasswordValidator<TUser> 
{ 
    Task<IdentityResult> ValidateAsync(UserManager<TUser> manager, TUser user, string password) 
    { 
     var options = // retrieve options 
     if (options.CustomRule.Matches(password)) 
     // etc 
    } 
} 

class MyPasswordOptions : Identity.PasswordOptions 
{ 
    object CustomRule { get; set; } 
} 

现在我要访问MyPasswordOptions的实例中MyValidator。我可以,例如:

  • 只需在Startup.cs中注册此类,就像任何选项类一样,然后将其注入到MyValidator的构造函数中;
  • 将MyPasswordOptions类的实例传递给services.AddIdentity()中的options.Password属性,并在MyValidator的构造函数中注入IdentityOptions。

然而,微软的原始实现通过UserManager的内部属性来访问选项,如果它不是内部的话,这对我来说似乎是最好的选择。

问题: 微软希望在自定义实现中访问Asp Identity Core中的选项的方式是什么?说,我没有自定义选项类。我仍然无法轻易访问MyValidator类中的IdentityOptions,而无需注入它们。原来的类(Identity.PasswordValidator)可以。

在它通过UserManager获取源代码:

manager.Options.Password 

这适用于获取默认选项,因为我认为你需要注册和解析它的自定义选项。

请参阅source code

+0

可悲选项是内部属性。如果我将它转换到我自己的类中,它可以用于自定义选项。 –

+1

哦,我明白了,你是对的。但即使这是可能的,你也无法将其投入自己的班级。因为你不能将基类投射到派生类。看来你必须注入选择。我会使用separete自定义选项,而不是派生。 –

+0

是的,我想这是唯一正确的方法。谢谢! –