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)
代码有问题还是数据库本身有问题?
谢谢你的时间。
当我尝试使用 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 ,否则您的登录将不会被验证,如下所示:
注意:如果仍然遇到同样的问题并且想了解有关身份登录的更多详细信息,您可以在此处查看我们的官方文档
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |