.NET 6 Razor Pages登录失败,提示Invalid Login Attempt求助
解决用户名登录提示“Invalid Login Attempt”的问题
1. 修复代码语法错误
你的LoginModel中OnGetAsync和OnPostAsync方法存在语法问题,Url.Content("~/";缺少闭合括号,这会导致页面逻辑异常,先修正:
// OnGetAsync方法内 returnUrl ??= Url.Content("~/"); // OnPostAsync方法内 returnUrl ??= Url.Content("~/");
2. 确认用户数据的UserName字段有效性
- 打开SQL Server数据库,检查
AspNetUsers表的UserName列,确认待登录用户的UserName值与你输入的内容完全一致(Identity默认区分大小写,除非额外配置)。 - 如果是通过脚手架默认注册流程创建的用户,
UserName会被自动设置为邮箱地址。若要使用独立用户名登录,需修改注册页面和注册Model,让用户填写独立的UserName,并在注册时将其赋值给DatacussUser的UserName属性。
3. 配置Identity支持用户名登录
在Program.cs(或Startup.cs)中,显式配置Identity的登录规则,确保允许用户名登录:
builder.Services.AddDefaultIdentity<DatacussUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); // 补充Identity配置 builder.Services.Configure<IdentityOptions>(options => { // 保持邮箱唯一性(可根据需求改为false) options.User.RequireUniqueEmail = true; // 关闭邮箱验证要求(若不需要强制验证邮箱登录) options.SignIn.RequireConfirmedEmail = false; });
4. 调试定位具体失败原因
在OnPostAsync方法中添加调试日志,明确登录失败的具体原因(用户不存在/密码错误/账号状态异常):
public async Task<IActionResult> OnPostAsync(string returnUrl = null) { returnUrl ??= Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { _logger.LogInformation("尝试登录的用户名: {UserName}", Input.UserName); // 检查用户是否存在 var user = await _signInManager.UserManager.FindByNameAsync(Input.UserName); if (user == null) { _logger.LogWarning("未找到用户名: {UserName}的用户", Input.UserName); ModelState.AddModelError(string.Empty, "Invalid login attempt."); return Page(); } // 检查密码是否匹配 var isPasswordValid = await _signInManager.UserManager.CheckPasswordAsync(user, Input.Password); _logger.LogInformation("用户名{UserName}的密码验证结果: {IsValid}", Input.UserName, isPasswordValid); // 执行登录 var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: false); // 原有登录结果判断逻辑... } return Page(); }
通过日志可以快速定位是用户不存在、密码错误,还是账号被锁定/未激活等问题。
5. 确认密码哈希正确性
如果是手动添加的用户,必须使用UserManager.CreateAsync或UserManager.PasswordHasher.HashPassword方法生成密码哈希值存储到数据库,直接存储明文密码会导致验证失败。
内容的提问来源于stack exchange,提问作者Rusty0918-B
相关产品推荐
相关产品推荐

