如何在Aspnet Core 2.1中设置密码选项

时间:2018-12-04 20:12:17

标签: c# asp.net-core asp.net-core-2.1 asp.net-core-identity

我遵循了SO example codeofficial 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文件。

2 个答案:

答案 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页-我已经确认它也会影响ResetPasswordSetPasswordChangePassword

关于解决方案:Chris Pratt在评论中指出,解决此问题的唯一真正方法是对受影响的页面进行脚手架,并对StringLength属性进行必要的更改。


更新:您提出的issue已作为副本被关闭,解决方案是对页面进行支架并进行所需的更改。

答案 1 :(得分:1)

这些都是密码的选项: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-2.2

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/