при использовании chrome инструментов разработчика с функциями реагирования вы можете просто отредактировать состояние пользователя и обойти частные маршруты
Ваши маршруты никогда не будут по-настоящему частными. Они являются частью пакета JavaScript, который загружается и отображается браузером, поэтому они никогда не должны содержать ничего секретного. Кто угодно мог прочитать этот код, если бы действительно захотел.
Учтите это:
if (loggedIn) {
return <div>Secret data: ABC</div>;
}
Строка «AB C» содержится в сборке вашего приложения и на самом деле не является секретом больше. Обычный пользователь не знает, как его получить, но разработчик, вероятно, мог бы, например, переключить какое-либо состояние в консоли разработчика.
Однако данные, поступающие из Firestore (или любой другой серверной службы) должны быть должным образом защищены. Проверки разрешений выполняются на стороне сервера перед отправкой этих данных в браузер. Таким образом, если у пользователя нет необходимых разрешений, данные никогда не будут открыты не тому человеку, даже если кто-то вмешается в ваш клиентский код в консоли разработчика.
if (loggedIn) {
fetchDataFromBackend();
}
Это не имеет значения если кто-то изменит loggedIn
на true
, чтобы вызвать fetchDataFromBackend()
; сервер будет следить за тем, чтобы данные не возвращались, если у пользователя нет соответствующих разрешений (например, он вошел в систему). В случае Firebase (Firestore) эта защита достигается с помощью правил безопасности.
И, кстати, рекомендуемый способ получить текущего пользователя с помощью Firebase - это добавить слушателя. в объект Auth:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// No user is signed in.
}
});
Вы можете поместить это в компонент верхнего уровня и поделиться объектом user
с дочерними компонентами через контекст. Таким образом, вам не придется звонить по номеру firebase.auth()
по всему миру. Вот хорошая отправная точка, если вам нужно вдохновение: https://usehooks.com/useAuth/