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

时间:2018-12-11 18:25:53

标签: c# asp.net-core dependency-injection asp.net-core-mvc asp.net-core-identity

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

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;
});

其中options.Password是一个称为PasswordOptions的Identity对象。 请注意,我的安全性如此松懈,仅仅是为了使Register操作更加流畅,而不必重复处理复杂的密码。

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

有什么方法可以访问这些选项值?到目前为止,我唯一的解决方案是将密码选项作为序列化的appsettings.json存储在PasswordOptions中,并使用Options模式将PasswordOptions注入我的{{ 1}}页的Register。但是,我可能不希望将这些选项存储在配置文件中,而是希望稍后访问它们,就像它们在PageModel中硬编码一样。

1 个答案:

答案 0 :(得分:5)

您可以在您的方法中直接向DI请求IOptions<IdentityOptions>的实例,然后使用类似以下的内容进行访问:

public class RegisterModel : PageModel
{
    private readonly IdentityOptions identityOptions;

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

    public void OnGet()
    {
        identityOptions.Password.RequireDigit; // etc
    }
}