Comments 9
Всё хорошо, но я бы на TypeScript писал. Как можно начинать сейчас проект на чистом JS - я не понимаю.
Не навязываю никому, просто ИМХО.
Этот гайд настроен больше на тех, кто осваивает JS, а без нормального знания JS, лезть в TS не стоит, имхо.
Проверять на клиенте время жизни токен нерационально. Лучше икак правидл все так и делают проверять время ж зни токена на сервере и форм ртвать ответ со статусом что токен истек .
Если делать на клиенте, мы получаем 2 запроса, и с меньшей задержкой.
.сохраняем токе в базе, ищемтокен в базе…
Эти действия противоречат смыслу заложенному в jwt. Товары как правило не нужно сохранять в базе. А валидация их проводится уриптографичкхеским способом а не поиском в базе.
Посмотрите, как работает стратегия passport-jwt. В целом да, можно избавиться от проверок базы и загнать весь объект пользователя в jwt, но тогда защита будет хуже, есть шанс на компрометацию access-token, который у клиента в локалсторадже лежит, а там будут личные данные пользователя, а в таких местах хранить данные не красиво, по отношению к пользователю. Опять же готов к обсуждению. Дайте, пожалуйста, развернутый ответ.
По поводу развернутого ответа я практически на все вопросы ответил в своем сообщении https://habr.com/ru/post/532130/ Некоторые моменты не имеет смысл обсуждать Их скорее нужно изучить, пранализировать. У JWT есть кейсы когда его нужно прирменять. Вот например вы упомянули что токен лучше проверять по дате локально и это якобы уменьшает нагрузку на сервер. В то же время храните токен в базе что как раз увеличивает нашгрузку на сервер. Почему оба варианта не соответсвуют смыслу применения JWT. Во-первых, проверка токена на сервере происходит без оращения к тяжнлвм скриптам и базе данных. Например то можно делать на уровне ngiinx или haproxy. А поскольку процесс это хаклчается в проверке подписи (а не пробванием токена по базе) то это процесс можно горизонтально масштабировать. Что касается хранения токена в локалсторе то если данные чувстивтельны то их можно шифровать.
Товары это токены который мой телефон исправил на товары а я не заметил.
Например, залогинились с браузера, а затем с телефона. Обе сессии получат одинаковый refresh-токен (или он вообще затрётся, суда по пункту шесть на схеме аутентификации). Позже разлогиниваемся в браузере, refresh-токен стирается из базы, нас выкидывает заодно и с телефона.
Или для таких сценариев какую-то другую схему с jwt используют?
Спасибо.
Если нужно работать одновременно с нескольких устройств, логику работы надо менять.
RESTful backend приложение. Базовый шаблон