在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
中硬编码一样。
答案 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
}
}