如果在ASP.NET核心MVC中找不到用户,则使用电子邮件或用户名登录的用户将返回null
我使用的是经过一些修改的默认标识页,在登录页面中我包含了用户登录的用户名。它工作得很好,用户现在可以通过电子邮件和用户名登录,但是当用户输入错误信息时,会出现一个空异常,而不是显示 无效的登录尝试 代码: 我知道错误发生的原因,但不知道正确的解决方法是什么 最初,如果在ASP.NET核心MVC中找不到用户,则使用电子邮件或用户名登录的用户将返回null,asp.net,asp.net-core,asp.net-core-mvc,asp.net-identity,asp.net-core-3.1,Asp.net,Asp.net Core,Asp.net Core Mvc,Asp.net Identity,Asp.net Core 3.1,我使用的是经过一些修改的默认标识页,在登录页面中我包含了用户登录的用户名。它工作得很好,用户现在可以通过电子邮件和用户名登录,但是当用户输入错误信息时,会出现一个空异常,而不是显示 无效的登录尝试 代码: 我知道错误发生的原因,但不知道正确的解决方法是什么 最初,signInManager检查的是用户输入,而不是实际用户,因此如果没有找到输入,它将不会成功,我该如何以相同的方式执行 当用户输入错误信息时,会出现空异常 在的源代码中,我们可以发现,如果用户为null,它将抛出NullExcepti
signInManager
检查的是用户输入,而不是实际用户,因此如果没有找到输入,它将不会成功,我该如何以相同的方式执行
当用户输入错误信息时,会出现空异常
在的源代码中,我们可以发现,如果用户为null,它将抛出NullException错误
public virtual async Task<SignInResult> PasswordSignInAsync(TUser user, string password,
bool isPersistent, bool lockoutOnFailure)
{
if (user == null)
{
throw new ArgumentNullException(nameof(user));
}
var attempt = await CheckPasswordSignInAsync(user, password, lockoutOnFailure);
return attempt.Succeeded
? await SignInOrTwoFactorAsync(user, isPersistent)
: attempt;
}
哦,这很简单!非常感谢你。
public virtual async Task<SignInResult> PasswordSignInAsync(TUser user, string password,
bool isPersistent, bool lockoutOnFailure)
{
if (user == null)
{
throw new ArgumentNullException(nameof(user));
}
var attempt = await CheckPasswordSignInAsync(user, password, lockoutOnFailure);
return attempt.Succeeded
? await SignInOrTwoFactorAsync(user, isPersistent)
: attempt;
}
var user = await _userManager.FindByNameAsync(Input.Email) ?? await _userManager.FindByEmailAsync(Input.Email);
if (user == null)
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}
var result = await _signInManager.PasswordSignInAsync(user, Input.Password, Input.RememberMe, lockoutOnFailure: true);
//...
//code logic here