REST проверка авторизации

201
03 октября 2021, 03:20

Кратко опишу проблему.

Есть SPA, допустим сайт для просмотра фотографий. Все данные берутся из API. Получение фотографий из API доступно без авторизации. Вот мы получили изображения, отрисовали их на странице, все ок.

Но вот потребовалась возможность добавлять фотографии в "избранные". Для добавления в "избранное" нужна авторизация, так как избранные изображения хранятся на бэкенде.

Акцентирую внимание - получение фото без авторизации, добавление в избранное с авторизацией.

Добавили авторизацию. Посылаем - логин, пароль, получаем токен авторизации, сохраняем токен в localStorage (далее будем посылать его в заголовках) Теперь что бы добавить изображение в избранное, посылаем PUT на на нужный адрес.

Теперь проблема.

Для добавления в избранное - нужна кнопка "Добавить в избранное", и есть такой маленький нюанс, показывать эту кнопку нужно только авторизованным юзерам! Без проблем, напишем функцию isLogged() - которая проверяет авторизован ли юзер. И на её основе будем показывать или не показывать кнопку "Добавить в избранное"

Вопрос! А что именно должна делать эта функция - isLogged()?

  • Проверять наличие токена в localStorage?
  • Или делать запрос к API ( GET /user/is_logged)? А если API стороннее и такого метода там нет?
  • А если в коде isLogged() вызывается много раз? Каждый раз слать запрос? (Это же задержки)
  • А может нужно делать один запрос и кешировать результат? Хорошо, мы
    закешировали результат на 10 сек, а через 5 сек. сервер уже сбросил
    токен авторизации. И теперь наша функция возвращает ложный результат.

Так как же нужно делать? Ведь я не первый кто столкнулся с этой проблемой.

Answer 1

Может быть, это и не целое готовое решение, но вот несколько советов по теме:

1) У токена обычно есть время жизни, которое можно учитывать при сохранении и повторном запросе;

2) Ваше приложение, скорее всего, реактивно - тогда можно отслеживать изменение токена в ответах сервера. Если пользователь нажал на кнопку, а сервер токен не принял - кнопка пропала, появилось предупреждение.

3) Можно при каждом обращении к серверу регенерировать токен, увеличивая тем самым его время жизни.

READ ALSO
Как программно определить на какой странице находится определенный элемент в документе word?

Как программно определить на какой странице находится определенный элемент в документе word?

Задача программно сгенирировать документ Word, а именно договорДля договора есть определенные правила того что если заголовок начинается...

160
Docker + IdentityServer4. Ошибка подключения

Docker + IdentityServer4. Ошибка подключения

Есть настроенный IdentityServer4 на AspNet core 3

153
обновление базы данных после изменений у конечного пользователя

обновление базы данных после изменений у конечного пользователя

Такой вот вопрос, может есть тут разработчики, которые подскажут, как можно выйти с такой ситуации

89