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>(); - 登录页逻辑不匹配
你只提供了注册代码,未提供登录页代码,大概率是登录逻辑和注册逻辑不匹配:- 如果你现在注册时将用户自定义的用户名存入
UserName字段,登录时如果还是拿用户输入的邮箱作为UserName参数传入PasswordSignInAsync方法,必然匹配不到用户 - 如果需要支持邮箱登录,需要先通过邮箱查询到对应用户,再调用密码校验方法:
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
相关产品推荐
相关产品推荐

