我遵循了SO example code和official documentation,但是我更改了Aspnet core 2.1项目中的密码长度,没有任何变化。
我总是收到消息“密码必须至少为6,并且最长为100个字符。”
在public void ConfigureServices(IServiceCollection services)
中,我尝试过
services.Configure<IdentityOptions>(options =>
{
options.Password.RequiredLength = 1;
});
在各个位置,或将其添加到AddDefaultIdentity<>
services.AddDefaultIdentity<IdentityUser>(options =>
options.Password.RequiredLength = 1;
)
.AddEntityFrameworkStores<ApplicationDbContext>();
但无济于事。
我正在使用non-scaffolded version,因此我无权访问HTML或cshtml文件。
答案 0 :(得分:3)
您似乎已经找到了脚手架的 bug 原因。在包含ASP.NET Core Identity UI的Razor页面实现的Razor类库中,Register
页面有一个InputModel
类,如下所示:
public class InputModel
{
...
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
...
}
从此代码段中可以清楚地看出,无论您将RequiredLength
设置为什么,内置的ModelState
验证都将始终需要6至100个字符的长度。
还值得注意的是,这不仅会影响Register
页-我已经确认它也会影响ResetPassword
,SetPassword
和ChangePassword
。
关于解决方案:Chris Pratt在评论中指出,解决此问题的唯一真正方法是对受影响的页面进行脚手架,并对StringLength
属性进行必要的更改。
更新:您提出的issue已作为副本被关闭,解决方案是对页面进行支架并进行所需的更改。
答案 1 :(得分:1)
services.Configure<IdentityOptions>(options =>
{
// Default Password settings.
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
options.Password.RequiredLength = 6;
options.Password.RequiredUniqueChars = 1;
});
要修改规则,请参阅此 How override ASP.NET Core Identity's password policy https://andrewlock.net/creating-custom-password-validators-for-asp-net-core-identity-2/