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

ASP.NET Core中OnModelCreating配置种子用户后PasswordSignInAsync始终失败求助

问题原因及修复方案

  • NormalizedUserName字段赋值错误
    ASP.NET Core Identity 中的 NormalizedUserName 是用户名的标准化大写版本,用于不区分大小写的用户名匹配,而非用户的显示姓名。你当前赋值为 "John Smith",但实际用户名是邮箱 john.smith@example.com,登录时 SignInManager 会将输入的用户名转为全大写后和数据库的 NormalizedUserName 匹配,完全对不上自然校验失败。
    修复:将 NormalizedUserName 的值改为 "JOHN.SMITH@EXAMPLE.COM",或者调用 Identity 自带的 ILookupNormalizer 来标准化字符串,避免手动写死出错。
  • NormalizedEmail字段赋值错误
    同理,NormalizedEmail 也需要是邮箱的全大写版本,你当前填的是原始小写邮箱,后续如果用到邮箱校验的逻辑也会出错,修复改为 "JOHN.SMITH@EXAMPLE.COM" 即可。
  • PasswordHasher 实例化不符合预期
    你直接手动 new PasswordHasher<ApplicationUser>() 创建哈希实例,没有使用依赖注入容器中由 Identity 初始化的实例。如果你的项目配置了自定义的密码哈希规则(比如指定哈希算法版本、加盐规则),手动创建的实例生成的哈希值,和 SignInManager 校验时用的哈希规则不一致,会导致密码校验永远失败。
    修复:不要在种子数据配置里直接生成哈希值,推荐两种方案:1. 先启动项目用注册接口创建一次测试用户,把数据库里生成的 PasswordHash 值复制过来填到种子数据里;2. 迁移种子数据时通过依赖注入拿到 IPasswordHasher<ApplicationUser> 实例后再生成哈希。另外你调用 HashPassword 时第一个参数传了 null,部分自定义哈希实现会读取用户实例属性参与哈希计算,也可能导致异常,最好传入你正在初始化的 ApplicationUser 实例。
  • 种子数据未实际写入数据库
    确认你写完 OnModelCreating 的种子配置后,已经执行了迁移命令(Add-Migration + Update-Database),把配置的用户数据真正插入到了数据库中,避免数据库里根本不存在这条测试用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:06:07