Как правильно убедиться, что подпись не удалась из-за несоответствия пароля в As pNet core Identity - PullRequest
0 голосов
/ 16 июня 2020

У меня аутентификация на основе 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);

1 Ответ

1 голос
/ 16 июня 2020

«Но я не могу найти способ убедиться, что причиной сбоя было несоответствие пароля»,

Потому что вы НЕТ. Лучшая практика - сказать «вам не удалось войти в систему». ПЕРИОД. Мудрый пользовательский интерфейс говорит: «неправильный пароль или пользователь не существует».

Если вы говорите «несоответствие пароля», вы подтверждаете, что имя пользователя действительное - что на самом деле означает, что я могу проверить имена пользователей или адреса электронной почты и, таким образом, узнать больше о том, где для перенаправления вложения на.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...