Я довольно новичок в Vue и в настоящее время настраиваю приложение, которое использует аутентификацию firebase и firestore для базового RBAC.
Для предотвращения доступа неавторизованных пользователей к маршрутам мой маршрутизатор имеет собственный AuthGuard, проверяющий роли локальных пользователей (в бэкэнде реализованы аналогичные правила)
export default new Router({
routes: [
{
path: '/users',
name: 'Users',
component: Users,
beforeEnter: AuthGuard(user => user.uid && user.roles.admin)
}
..
]})
Одна проблема, с которой я столкнулся при этой настройке, заключается в том, что отправка людям ссылок на защищенные страницы не работает. Защита авторских прав не позволяет им загружать страницу, потому что локальный user
не устанавливается инициализированным при инициализации приложения Vue.
Итак, я придумал способ , чтобы отложить создание моего приложения Vue путем структурирования моего main.js
чего-то такого:
import Vue from 'vue'
...
init()
.then(() => new Vue(..)
Во время выполнения функции init
я жду, когда сработает firebase.auth().onAuthStateChanged
и сообщит, есть ли у пользователя действующий токен или нет. Он работает , но не чувствует себя хорошо.
Можно ли асинхронно создавать новое приложение Vue? Есть ли лучшие методы, такие как ленивая загрузка аутентификации на маршруте или что-то в этом роде?