В моём приложении уже есть авторизация по JWT. Теперь хочу сделать функцию "Запомнить меня". Суть такая: если пользовать поставил галочку, то в следующий раз вход будет произведён автоматически. А если он галочку не поставил, то после закрытия вкладок с сайтом ему надо будет опять логин и пароль вводить.
Соображение такое: можно при установленной галочке токен записывать в localStorage. Сложнее с тем, как токен удалять, если галочки нет. Если галочки нет, можно токен кидать в sessionStorage, но это не очень удобно будет - во-первых, если пользователь вторую вкладку откроет, то там ему опять авторизоваться придётся, и ещё придётся подтягивать токена сразу с этих двух хранилищ.
Как мне тогда лучше всего реализовать "Запомнить меня"?
Eugenue Cesarevich, если уж про localstorage пошла речь, то при нажатой галке очищать access token и оставлять refresh token в localstorage (у access токена, в принципе, время жизни должно быть не особо большое, чтобы после ухода access токен самостоятельно протух), без галки - удалять и access token и refresh. На основе refresh выдавать access токен при повторном входе.
Ну и в целом я бы рекомендовал устанавливать токены в куки с сервера с флагом httpOnly, а не класть их в localStorage со стороны фронта.
Eugenue Cesarevich, тогда печаль ) единственный вариант приходящий в голову - пересоздавать токен по нажатию "запомнить" без даты протухания по галке, а удалять его только по разлогину, но такой вариант мне не нравится
Eugenue Cesarevich, обычно делают с двумя токенами - access и refresh или на основе серверных сессий, реализовать только на основе одного jwt я лично не знаю как, чтобы было удобно да еще и безопасно.
Про вторую вкладку вы выдумали или пробовали? ЕМНИП sessionStorage очищается если закрыть все вкладки сайта, а не для каждой отдельное хранилище.
И что сложного в получении токена из двух хранилищ?
API у них одинаковый. Делаем обертку и дёргаем её метод, а под капотом обращаемся к нужному хранилищу.
sessionStorage существует только в рамках текущей вкладки браузера.
Другая вкладка с той же страницей будет иметь другое хранилище.
Но оно разделяется между ифреймами на той же вкладке (при условии, что они из одного и того же источника).
Eugenue Cesarevich, а писать в куки и ставить время жизни куки?
У меня есть пакет для работы с localStorage и временем жизни, но он в peerDependencies просит vue. Хотя можно просто оттуда выдернуть класс-обёртку. Посмотрите vue2-storage пакет, может натолкнёт на мысль.