You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么ASP.NET Core Identity配置的密码验证规则完全不生效?

问题原因
  • 调用了错误的UserManager.CreateAsync重载
    你在注册逻辑里手动对密码做了哈希,调用的是仅传入用户实体的CreateAsync重载,该重载设计用于已完成密码哈希的场景,不会触发任何内置密码校验逻辑。
  • ModelState不会自动校验Identity密码规则
    你定义的RegisterBindingModel仅给Password字段加了[Required]注解,Identity的密码规则属于业务逻辑层校验,不会自动作用于模型绑定校验阶段,所以只要密码不为空ModelState.IsValid就会返回true。
修复方案

1. 修改注册逻辑代码

删掉手动哈希密码的代码,改用带明文密码参数的CreateAsync重载,该重载会自动执行所有配置好的密码校验,校验通过后自动完成密码哈希存储:

// 删除这两行代码
// user.PasswordHash = _passwordHasher.HashPassword(user, model.Password);
// IdentityResult result = await _userManager.CreateAsync(user);

// 替换为以下代码
IdentityResult result = await _userManager.CreateAsync(user, model.Password);

2. 修正配置文件格式错误

你appsettings.json中的Lockout配置项名称末尾多了多余空格,会导致配置绑定失败,修正为:

"Lockout": {
  "AllowedForNewUsers": true,
  "MaxFailedAccessAttempts": 5,
  "DefaultLockoutTimeSpan": "00:05:00"
}

补充说明

不需要手动调用IPasswordValidator的校验方法,UserManager的带密码参数的CreateAsync重载内部会自动遍历所有已注册的密码校验器执行校验,校验不通过会直接返回带对应错误信息的IdentityResult。

内容的提问来源于stack exchange,提问作者ackh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:09:00