У меня аутентификация на основе JWTBearer. Проблема, с которой я сталкиваюсь, заключается в том, что при неудачной подписи он просто возвращает 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);
}
}
}
return BadRequest (errors);