Приложение без сохранения состояния - как узнать, авторизован ли пользователь для показа страницы
Допустим, у меня есть приложение React с Spring REST API, и я использую аутентификацию на основе токенов. Теперь допустим, что я также использую React-Router для навигации.
Я хочу, чтобы некоторые страницы приложения были видны только зарегистрированным пользователям.
Что я планирую сделать, так это спрашивать мой сервер (делать запрос на получение) при каждом изменении страницы, аутентифицирован ли пользователь, а затем предоставлять соответствующие данные. Если нет, перенаправить на логин
Я считаю, что это правильный способ сделать это, чтобы быть уверенным, что мой пользователь аутентифицирован для просмотра страницы, но есть ли что-то лучше? Боюсь, если звонок на каждую страницу тяжелый. Как другие API без сохранения состояния обрабатывают этот случай?
Заранее спасибо!
2 ответа
Я сделал это с помощью бэкэнда Laravel и внешнего интерфейса VueJS. Немного отличается от React, но я думаю, что то же самое.
я использовал JWT
(JSON Web Token) и создайте API входа в систему. если пользователь вошел в систему через API входа, выдайте токен и ответьте пользователю. Тогда ваша инфраструктура внешнего интерфейса должна хранить токен в Cookie или локальном хранилище.
Когда ваше приложение хочет получить данные из API, каждый раз добавляйте токен в заголовок запроса. Вы можете расшифровать токен из промежуточного ПО бэкэнда как вошедший в систему пользователь или нет.
Хорошо это как JWT
и бэкэнд работа. Возвращаясь к вашему вопросу, вы можете легко сохранить токен и использовать его повторно в качестве идентификатора пользователя, пока токен не истек.
После открытия страницы веб-интерфейса отправьте запрос API-интерфейсу сервера, чтобы получить полное имя пользователя, имя учетной записи или все, что вам нужно для рендеринга страницы хотя бы один раз. (Вместо этого, если вы уже сохранили это в локальном хранилище, просто покажите его.)
Из-за сохранения токена вы будете знать, вошел ли пользователь в систему или нет. Таким образом, вы можете обрабатывать некоторые личные страницы только для членов из маршрута инфраструктуры внешнего интерфейса. Но только для улучшения пользовательского опыта. Проверьте токен и идентификацию пользователя перед поиском и возвратом конфиденциальных данных.
Храните токен либо в локальном хранилище, либо в хранилище сеансов. Таким образом, вам нужно сделать только один начальный вызов серверу авторизации. https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API