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

Access Identity Password Options after Configure Services

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

其中 options.Password 是一个名为 PasswordOptions 的身份对象。 请注意,我的安全措施如此松懈,只是为了让 Register 操作更顺畅一些,而不必重复处理复杂的密码。

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

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

中一样

您可以在您的方法中从 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
    }
}