配置服务后访问身份密码选项

Pro*_*ofK 3 c# dependency-injection asp.net-core-mvc asp.net-core asp.net-core-identity

ConfigureServices启动方法中,在配置Identity服务期间,可以使用以下代码配置密码规则:

services.Configure<IdentityOptions>(options =>
{
    options.Password.RequireDigit = false;
    options.Password.RequireLowercase = false;
    options.Password.RequireNonAlphanumeric = false;
    options.Password.RequireUppercase = false;
    options.Password.RequiredLength = 6;
    options.Password.RequiredUniqueChars = 2;
});
Run Code Online (Sandbox Code Playgroud)

在哪里options.Password调用Identity对象PasswordOptions.请注意我的安全性非常宽松,只是为了使Register操作更顺畅,而不必重复处理复杂的密码.

现在在我的注册页面中,我希望有一个GeneratePassword方法将PasswordOptions实例作为输入并生成符合这些选项的密码.我希望该对象具有与我在设置密码选项时使用的相同的值ConfigureServices.

有没有办法访问这些选项值?到目前为止,我唯一的解决方案是将密码选项存储在我appsettings.json的序列化中,PasswordOptions并使用该Options模式将一个注入PasswordOptions到我的Register页面中PageModel.但是,我可能不希望将选项存储在配置文件中,并且希望稍后在硬编码时访问它们ConfigureServices.

Kir*_*kin 5

您只需IOptions<IdentityOptions>在方法中请求DI 的实例,然后使用以下内容访问它:

public class RegisterModel : PageModel
{
    private readonly IdentityOptions identityOptions;

    public RegisterModel(IOptions<IdentityOptions> identityOptions)
    {
        this.identityOptions = identityOptions.Value;
    }

    public void OnGet()
    {
        identityOptions.Password.RequireDigit; // etc
    }
}
Run Code Online (Sandbox Code Playgroud)