【问题标题】:ASP.NET Identity Password ValidationASP.NET 身份密码验证
【发布时间】:2015-03-04 16:15:45
【问题描述】:

我在我的 MVC 项目中使用 Identity,一切都很好。除了注册新用户的表单有一些疯狂的密码要求之外

密码必须至少包含一个非字母或数字字符。密码必须至少有一位数字('0'-'9')。密码必须至少有一个大写的('A'-'Z')

这里是寄存器模型

public class RegisterViewModel
{
    [Required]
    [StringLength(50, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 2)]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required]
    [StringLength(50, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 2)]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Passord")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Repeat Password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

账户控制人

    // POST: /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
                return RedirectToAction("Index", "Home");
            }
            AddErrors(result);
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

我看到密码的长度要求,但我不明白如何更改密码验证,所以我不需要非字母或数字字符。

非常感谢所有帮助,谢谢。

奖励:{0}{2} 是什么意思?谢谢。

【问题讨论】:

  • 验证可能在您的AccountController 某处。
  • 在您的项目中搜索“RequireNonLetterOrDigit”并查看here。奖励:这是一个格式字符串,带有两个占位符,用于传递给该格式的第 0 个参数和第 2 个参数。
  • 这是格式字符串的更完整的answer

标签: asp.net-mvc asp.net-identity


【解决方案1】:

在您添加身份服务的Startup.cs 中,您可以添加密码验证选项:

services.AddIdentity<ApplicationUser, IdentityRole>(Configuration, 
    options => 
        options.Password = new PasswordOptions 
        { 
            RequireDigit = true, 
            RequiredLength = 6, 
            RequireLowercase = true, 
            RequireUppercase = true, 
            RequireNonLetterOrDigit = false 
        })
[...];

【讨论】:

  • 这是我使用带有个人用户帐户的 ASP.NET Core Web 应用程序 (.NET Core) 项目模板所需要的。
  • 我改变了这个 - 没有效果它仍然强制执行相同的密码要求
【解决方案2】:

如果您使用的是 ASP.NET 模板应用程序之一,并且选择了身份验证作为“个人用户帐户”,您将在应用程序的 App_Start 文件夹中的 IdentityConfig.cs 文件中找到密码选项。在这里您可以更改密码选项如下,以关闭除密码长度以外的所有要求:

manager.PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = false,
            RequireDigit = false,
            RequireLowercase = false,
            RequireUppercase = false,
        };

【讨论】:

  • 有人知道我们如何将错误消息更改为另一种语言吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2020-03-26
  • 2018-09-11
相关资源
最近更新 更多