use*_*625 2 c# asp.net-core asp.net-core-identity
登录失败时,我想知道它是用户名,密码还是其他。
var signinResult = await _signInManager.PasswordSignInAsync(
loginViewModel.UserName,
loginViewModel.Password,
false, false);
Run Code Online (Sandbox Code Playgroud)
返回SignInResult,它仅告诉我它是NotAllowed。
我能以某种方式从身份中获得更有意义的理由吗?
NotAllowed表示电子邮件或电话号码尚未确认(需要确认)。您可以使用类似以下内容的方法显式检查此内容(假设您有一个UserManager来自DI 的实例):
await _userManager.IsEmailConfirmedAsync(user);
await _userManager.IsPhoneNumberConfirmedAsync(user);
Run Code Online (Sandbox Code Playgroud)
要使用这两个功能中的任何一个,您需要user:
var user = await _userManager.FindByNameAsync(loginViewModel.UserName);
Run Code Online (Sandbox Code Playgroud)
要确定它是否是用户名或失败的密码,您需要先检查IsLockedOut,IsNotAllowed和RequiresTwoFactor。如果所有这些都返回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.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |