Однако наша конечная точка сброса пароля выдает ошибки, если я повторно отправлю запрос несколько раз (тот же самый запрос), он снова работает.
Вот краткое описание нашего процесса: после проверки пользователя я генерирую токен сброса пароля следующим образом:
Код: Выделить всё
var token = await _userManager.GeneratePasswordResetTokenAsync(user);
Код: Выделить всё
// removed rest of the code for brevity
if (user == null)
{
throw new CustomException(UserNotFoundException);
}
var isValid = await userManager.VerifyUserTokenAsync(user, userManager.Options.Tokens.PasswordResetTokenProvider, "ResetPassword", token);
if (!isValid)
{
throw new CustomException(InvalidTokenException);
}
return isValid;
Эта проблема возникает только в нашей производственной среде; в наших средах тестирования такой проблемы нет. Кажется, проблема связана только с PasswordResetTokenProvider, поскольку наш пользовательский поставщик OTP работает корректно и без сбоев.
Шаги, которые я предпринял на данный момент:
< ul>
[*]Проверено, что токен, сгенерированный функцией GeneratePasswordResetTokenAsync, и токен, отправленный в запросе, идентичны.
[*]Убедился, что токен отправляется в тексте запроса во избежание несоответствий кодирования/декодирования.
[*]Подтверждено, что SecurityStamp не имеет значения NULL во время процесса.
[*]Проверено, что код не был изменен сделано до возникновения этой проблемы (она начала происходить недавно без каких-либо видимых изменений).
Есть идеи, что может быть причиной этого? в этот момент я чувствую себя потерянным и не знаю, где искать. У меня есть одно подозрение: может быть запущено несколько экземпляров нашего приложения для идентификации, и это может быть причиной проблемы (хотя я не знаю, вызовет ли это вообще проблему). При необходимости я буду рад предоставить дополнительный код.
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/787 ... ly-invalid