В моем массиве routes
в main.js
я установил
meta : { requiresAuth: true }
для каждого компонента, кроме страницы UserLogin
.
Что касается разрешения навигации, я установилперед каждым маршрутом проверяйте следующее:
router.beforeEach((to, from, next) => {
const currentUser = firebase.auth().currentUser;
const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
const currentUserState = !!currentUser;
console.table({ currentUserState, requiresAuth });
if (requiresAuth && !currentUser) {
next('/login');
} else {
next();
}
}
При такой настройке все работает почти так, как ожидается / запланировано.Зарегистрированные пользователи могут отправиться куда угодно, а анонимные пользователи будут перенаправлены на localhost/login
.
Однако эта проверка и перенаправление работают только при переходах пользователей по ссылкам в веб-приложении (которые все <router-link>
).s go :to="{ name: 'SomeComponent' }"
.
Когда какой-либо пользователь (зарегистрированный или анонимный) пытается перемещаться по приложению, набирая или копируя вставленные URL-адреса, приложение автоматически отправляет их на страницу входа.
Из вывода console.table я вижу, что ручной ввод URL всегда приводит к тому, что currentUserState имеет значение false.
Оно не остается ложным: пользователь, вошедший в систему (currentUserState === true
), который затемгде-то перемещается вручную (currentUserState === false
), currentUserState
возвращается к true
Я могу только смутно догадываться, что проблема связана с рендерингом и firebase.auth()
.