c# - 由于 AspNet 核心身份中的密码不匹配,确保签名失败的正确方法是什么
问题描述
我有基于 JWTBearer 的身份验证。我面临的问题是,当签名失败时,它只是 return result.Succeeded=false
。但是我找不到确保失败原因是密码不匹配的方法,因为当电子邮件未确认或用户被锁定时返回相同的结果。作为一种解决方法,如果失败原因不是提供的属性之一,Result
那么我认为它是密码不匹配。这是代码,
GenericApiErrorCollection errors = new GenericApiErrorCollection();
var user = await _signInManager.UserManager.Users.SingleOrDefaultAsync
(x => x.NormalizedUserName == loginUser.UserName.ToUpperInvariant());
if (user == null)
{
errors.AddError(ErrorResponsCodes.UserDoesnotExist);
}
else
{
var result = await _signInManager.CheckPasswordSignInAsync(user, loginUser.Password, false);
if (result.Succeeded)
{
var token = AccessTokenFor(user);
var refreshToken = await RefreshTokenForAsync(user, loginUser.ClientId);
return Ok(new { token, refreshToken });
}
else
{
if (result.IsLockedOut)
{
errors.AddError(ErrorResponsCodes.UserLockedOut);
}
else if (result.IsNotAllowed)
{
errors.AddError(ErrorResponsCodes.UserNotAllowed);
}
else if (result.RequiresTwoFactor)
{
errors.AddError(ErrorResponsCodes.UserRequiresTwoFactor);
}
else
{
errors.AddError(ErrorResponsCodes.UserNamePasswordDoesntMatch);
}
}
}
返回 BadRequest(错误);
解决方案
“但我找不到确保失败原因是密码不匹配的方法,”
因为你不。最好的做法是说“您无法登录”。时期。UI 明智地说“密码错误或用户不存在”。
如果您说“密码不匹配”,则表示您确认用户名有效——这实际上意味着我可以检查用户名或电子邮件,从而了解更多将附件重定向到的位置。
推荐阅读
- python - 如何根据两个不同熊猫数据框中的两列查找相同行的索引?
- javascript - 将哨兵与解析服务器集成
- c - 套接字编程,使用ip地址
- javascript - 如何在库 Zip 文件夹中提供版本号
- html - 无法验证角度 6 中的 Select 选项
- reactjs - react js cron作业如何设置固定时间日期
- r - x$name 不等于 x[["name", exact = FALSE]],为什么不呢?
- cordova - 在我的 android 设备中使用 media-capture cordova 插件的 captureImage 方法时应用程序崩溃
- python-3.x - 在 Putty/Plink 中使用 Python 代码在多个设备中执行命令
- kubernetes - 具有 2 个或更多指标的 kubernetes HPA 的行为如何——尤其是副本数计算?