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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:05:00