gpt4 book ai didi

c# - .net 核心身份,获得有意义的登录失败原因

转载 作者:行者123 更新时间:2023-11-30 19:52:56 25 4
gpt4 key购买 nike

当登录失败时,我想知道是用户名、密码还是其他问题。

var signinResult = await _signInManager.PasswordSignInAsync(
loginViewModel.UserName,
loginViewModel.Password,
false, false);

返回 SignInResult,它只是告诉我这是 NotAllowed。

我能否以某种方式从 Identity 中获得更有意义的理由?

最佳答案

NotAllowed 表示电子邮件或电话号码尚未确认(需要确认)。您可以使用类似以下内容明确检查这一点(假设您有一个来自 DI 的 UserManager 实例):

await _userManager.IsEmailConfirmedAsync(user);
await _userManager.IsPhoneNumberConfirmedAsync(user);

要使用这两个函数中的任何一个,您需要用户:

var user = await _userManager.FindByNameAsync(loginViewModel.UserName);

要确定是用户名还是密码失败,您需要先检查 IsLockedOutIsNotAllowedRequiresTwoFactor。如果所有这些都返回 false,则用户名或密码不正确。为了确定哪一个是问题所在,您可以检查 await _userManager.FindByNameAsync(user) 的返回值。这是一个完整的示例:

var signinResult = await _signInManager.PasswordSignInAsync(
loginViewModel.UserName, loginViewModel.Password, false, false);

var user = await _userManager.FindByNameAsync(loginViewModel.UserName);

if (signinResult.IsNotAllowed)
{
if (!await _userManager.IsEmailConfirmedAsync(user))
{
// Email isn't confirmed.
}

if (!await _userManager.IsPhoneNumberConfirmedAsync(user))
{
// Phone Number isn't confirmed.
}
}
else if (signinResult.IsLockedOut)
{
// Account is locked out.
}
else if (signinResult.RequiresTwoFactor)
{
// 2FA required.
}
else
{
// Username or password is incorrect.
if (user == null)
{
// Username is incorrect.
}
else
{
// Password is incorrect.
}
}

关于c# - .net 核心身份,获得有意义的登录失败原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52363319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com