Уничтожить токен JWT, принудительно выйти из системы, когда пользователя забанят или отредактируют - PullRequest
1 голос
/ 19 октября 2019

Добрый день, друзья,

Я занимаюсь разработкой приложения, в моей пользовательской системе добавьте функции для администраторов, чтобы повысить уровень учетной записи (если уровень 10, это администратор) или запретить ее на сайте.

Как только пользователь входит в систему, он получает токен, который содержит информацию об уровне его учетной записи, независимо от того, заблокирован он или нет.

Эта функция работает отлично, но если пользователь заблокирован, они могут продолжать использовать сайт, пока не получат новый токен или срок его действия не истек, поскольку информация получена из токена. Я хочу заставить пользователя закрыть свой сеанс (уничтожить токен JWT), как только он будет заблокирован или его уровень отредактирован.

Я могу проверить в маршрутах, что каждый раз, когда пользователь делает вызов, серверная часть проверяетв базе данных, если пользователь забанен или нет. Но я бы хотел упростить этот шаг, чтобы сервер не делал так много обращений к базе данных. Мне приходит в голову удалить определенный токен пользователя или сделать его недействительным после того, как его забанят с сайта или его уровень будет изменен. Таким образом, пользователь вынужден снова войти в систему и получить новый токен.

Существует ли метод или библиотека, которые позволяют мне легко удалить токены или сделать их недействительными?

Потому что еслия вхожу с моей учетной записью администратора и пытаюсь отредактировать свою учетную запись и дать ей уровень 1, я больше не смогу редактировать этого пользователя, потому что мой lvl равен 1, и мне снова нужен lvl 10 для использования функций этого маршрута, но я могу редактироватьэто снова, потому что авторизация токена действительна, и это не должно произойти

1 Ответ

0 голосов
/ 20 октября 2019

Я хочу заставить пользователя уничтожить свой токен JWT, как только он будет заблокирован или его уровень отредактирован.

Это невозможно, пользователь может сохранить любые данные, которые вы 'Мы дали им.

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

Есть ли метод или библиотека, которые позволяют мне легко удалить токены или сделать их недействительными?

Вы ищете простые HTTP-сессии . Вы бы вообще не раздавали какие-либо подписанные токены с данными, вы бы хранили данные сеанса на стороне сервера - в оперативной памяти, дополнительном кэше или базе данных. Оттуда вы можете удалить его, чтобы лишить законной силы сеанс и выйти из системы или изменить их статус доступа.

Существует стандартная реализация для каждой серверной экосистемы. Не выполняйте это самостоятельно с запросом к базе данных на каждом маршруте, используйте промежуточное программное обеспечение, например express-session (см. Как использовать переменную сеанса с NodeJs? ).

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