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

ASP.NET Core Identity自定义注册后新用户登录提示无效登录尝试问题

问题排查与解决方案

  • 邮箱确认限制触发
    你的注册代码里会读取_userManager.Options.SignIn.RequireConfirmedAccount配置项,只要你在Program.cs/Startup中开启了账号确认要求(默认创建的ASP.NET Core Identity项目是默认开启的),注册完成后未点击邮箱确认链接的账号会被直接拦截登录,返回invalid login attempt错误。
    解决方式:要么测试时点击确认邮箱链接,要么临时关闭确认要求验证配置:
    builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = false)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    
  • 登录页逻辑不匹配
    你只提供了注册代码,未提供登录页代码,大概率是登录逻辑和注册逻辑不匹配:
    1. 如果你现在注册时将用户自定义的用户名存入UserName字段,登录时如果还是拿用户输入的邮箱作为UserName参数传入PasswordSignInAsync方法,必然匹配不到用户
    2. 如果需要支持邮箱登录,需要先通过邮箱查询到对应用户,再调用密码校验方法:
    var user = await _userManager.FindByEmailAsync(Input.Email);
    if (user != null)
    {
        var result = await _signInManager.PasswordSignInAsync(user, Input.Password, Input.RememberMe, lockoutOnFailure: false);
        // 后续处理逻辑
    }
    
  • 注册代码存在笔误
    你当前代码中returnUrl ??= Url.Content("~/~");多写了一个波浪号,正确写法应为returnUrl ??= Url.Content("~/");,该错误会导致注册完成后跳转路径异常,建议优先修复。
  • 字段前后空格问题
    注册时没有对UserName、Email字段做Trim处理,用户输入时如果带了前后空格,存入数据库的字段值就会包含空格,登录时如果输入没有带空格就会匹配失败,建议在注册创建用户前对输入字段做Trim处理:
    var user = new IdentityUser { UserName = Input.UserName.Trim(), Email = Input.Email.Trim() };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:36:02