Как хранить состояние авторизованного пользователя в spa и как ее правильно обновлять?
Доброго всем дня, может кто рассказать как правильно хранить флаг авторизации на сайте, а именно:
У меня jwt авторизация, предположим пользователь залогинился, я меняю флаг например в куках или локалстораже на isLogin: true, из за чего у меня перерисовывается интерфейс (например убирается кнопка войти и появляется кнопка выйти), так вот, в следующий раз когда он зайдет, у него кнопка выйти останется, хотя токен по факту уже сгорел и его нужно обновить, следовательно кнопки выйти уже не должно быть, должна быть кнопка войти. Но делать проверку каждый раз при заходе на главную страницу валидна ли ранняя авторизация мне кажется немного не правильна, при каждом заходе на страницу будет посылаться запрос на сервер, при каждом обновлении будет посылаться запрос на сервер, мне кажется можно как то более лаконично это сделать, можете подсказать как?
Посоветовал бы сделать общий сервис с запросами, например написал бы класс с основными методами(get,post,patch,delete etc) и наследовался бы от него для отправки запросов где нужна авторизация, например получения инфы о пользователе. В родительском классе можно вытаскивать перед запросами из localstorage jwt токен и проверять его время жизни, если оно вышло, то отправляем запрос на обновление токена, обновляем токен и разрешаем запрос для получения инфы о пользователе, иначе меняешь статус isLogin: false и у тебя интерфейс автоматом перерисовывается. Как-то так, надеюсь мое краткое объяснение поможет :)
Во-первых зачем флаг - у тебя есть токен, вот тебе и флаг
Во-вторых встрой эти данные прямо в страницу, если сервер авторизации и сервер с которым работаешь это по факту один и тот же сервак. Т.е. главная же у тебя все равно грузится?
Добавь в нее объект json как-нибудь так:
И читай эти параметры при загрузки приложения. А потом храни в LS. Ну а если токен устарел - значит устарел.
Если же серверы разные - то тут никак не пройдешь мимо запроса к серверу авторизации. Смело делай его - в чем проблема? Почему это вдруг не правильно?