



Я думаю, вам нужно хранить токен jwt в базе данных (лучше в базе данных в памяти). Когда пользователь меняет пароль, удалите токен конкретного пользователя. Каждый раз, когда вы проверяете токен, вы проверяете наличие токена в базе данных.
Недействительные веб-токены JSON
Прежде всего, аннулируйте / удалите JWT на стороне клиента, когда пароль успешно сброшен.
Захватите метку времени смены пароля в таблице.
Предоставьте метку времени «проблема в (iat)» в полезной нагрузке токена JWT.
Когда токен декодируется на сервере, проверьте, является ли временная метка «iat» более ранней, чем временная метка смены пароля. если да, то аннулируйте токен.
С помощью этого механизма вам не нужно беспокоиться о случаях, когда у пользователя более одного JWT, но есть небольшие накладные расходы на чтение базы данных для метки времени смены пароля.
Какой смысл в jwt, если вам нужно получить доступ к db, чтобы проверить это? Лучше использовать обычные токены, хранящиеся в db. Не так ли?
Один из подходов к этому - сохранить в базе данных такое поле, как token_seq. Затем вы включаете user_id и token_seq в свой JWT. Во время процесса сброса пароля вы увеличиваете поле token_seq. При проверке вашего JWT вы проверяете как user_id, так и token_seq.
Это дает вам возможность аннулировать все «старые» токены в любое время.
ОБНОВЛЕНИЕ: Другой подход от этот ответ - использовать хэш любого значения пароля, которое вы уже сохраняете для пользователя. Это означает, что при изменении пароля все старые токены автоматически аннулируются.
Я слишком поздно для ответа, но я думаю, что это может помочь кому-то другому. если вы хотите аннулировать свой jwt после изменения пароля, это легко сделать, но вам нужно только понять, что когда вы меняете секретный ключ, токен jwt больше недействителен, что вам нужно сделать, это поставить хешированный пароль в качестве secet ключ для вашего jwt и убедитесь, что новый пароль не очень старый, и он не может знать, что это он
Бонус
убедитесь, что срок действия истекает на небольшое количество времени, например 1 час, чтобы сделать его более безопасным
Он спрашивает о токенах jwt. Нет смысла использовать токены jwt, если вы храните их в db.