配置服务后访问身份密码选项
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
}
}
在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
}
}