尝试访问有效帐户 ASP.NET Core 时出现无效登录尝试

Dav*_*vid 2 c# asp.net-core asp.net-core-identity

我的 PC 上有 ASP.NET Core 项目,那里的一切都运行良好。

最近,我将 SQL 数据库从 PC 转移到笔记本电脑上,看看如果我将项目发送给某人会发生什么。我有两个数据库,但在这个问题中,我想重点关注存储用户信息的数据库。

当我尝试使用 PC 上的帐户登录时,一切正常,并且我能够登录到我的帐户,但是当我尝试在笔记本电脑上执行相同操作时,我得到的是Invalid Login Attempt,这是检查登录的函数:

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl ??= Url.Content("~/");

    ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
        
    if (ModelState.IsValid)
    {
        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, set lockoutOnFailure: true
        var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);

        if (result.Succeeded)
        {
            _logger.LogInformation("User logged in.");
            return LocalRedirect(returnUrl);
        }

        if (result.RequiresTwoFactor)
        {
            return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
        }

        if (result.IsLockedOut)
        {
            _logger.LogWarning("User account locked out.");
            return RedirectToPage("./Lockout");
        }
        else
        {
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            return Page();
        }
    }

    // If we got this far, something failed, redisplay form
    return Page();
}
Run Code Online (Sandbox Code Playgroud)

代码有问题还是数据库本身有问题?

谢谢你的时间。

Md *_*ron 7

当我尝试使用 PC 上的帐户登录时,一切正常,并且我能够登录到我的帐户,但当我尝试在笔记本电脑上执行相同操作时,我收到“无效登录尝试”。

根据您共享的代码片段,在您的登录 OnPostAsync 方法中,结果变量返回IsNotAllowed属性值为 true 或除 Succeeded、RequiresTwoFactor 或 IsLockedOut 之外的任何值,对于这些情况,您将得到“无效的登录尝试”,这意味着前三个条件失败。

我已经成功重现了您的问题,您可以查看以下内容:

在此输入图像描述

代码有问题还是数据库本身有问题?

可能的原因:

遇到这种情况可能有多种原因。请仔细检查项目中的以下配置:

1.检查数据库连接字符串是否正确:

正如您所说,您有两个数据库,请确保您连接到项目中正确的数据库。在您的 appsetting.json 文件中,仔细检查以下值是否正确。

在此输入图像描述

2.确保您有正确的用户:

您尝试登录的用户确保位于您的数据库表中,可以在 AspNetUser 表中找到该用户。

在此输入图像描述

3.检查 AspNetUsers 表 EmailConfirmed 值:

在 AspNetUsers 表中,您将看到一列 EmailConfirmed。这对于您的场景非常关键。如果您在这种情况下设置为 true,并且在登录前未验证您的电子邮件,则登录尝试将失败。

在此输入图像描述

4. Program.cs 文件中的 RequireConfirmedAccount 值:

在您的program.cs文件中,您为RequireConfirmedAccount设置的值与“无效登录尝试”相关。如果您设置为 true,则意味着您需要在登录前验证您的帐户,但您也可以将其设置为 false。您可以执行以下操作:

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = false)
    .AddEntityFrameworkStores<ApplicationDbContext>();
Run Code Online (Sandbox Code Playgroud)

注意: 它允许您无需验证电子邮件帐户即可登录。

5.检查是否得到 result.Succeeded = true:

除非您没有得到 result.Succeeded = true ,否则您的登录将不会被验证,如下所示:

在此输入图像描述

注意:如果仍然遇到同样的问题并且想了解有关身份登录的更多详细信息,您可以在此处查看我们的官方文档