Я немного рассол. Любая помощь была бы отличной
Я занимаюсь этим уже некоторое время и пробовал разные вещи, прежде чем обратиться к вам. Вы - моя последняя линия защиты.
Проблема:
У меня есть Vue страница, настроенная с VueRouter, и некоторые базовые c JWT auth. Я хочу визуализировать элемент Header
на некоторых страницах, но не на других.
Я пытался использовать v-if
, но он неопрятен и не выглядит правильным.
Я пытался ответить на этот вопрос: Как отобразить заголовок и боковую панель после входа в систему, используя Vue, но после страницы входа в систему она отображает пустые страницы
Вот примеры (упрощенно)
Приложение. js:
<template >
<div id="app">
<router-view/>
</div>
</template>
<script>
export default {
name: "app"
}
</script>
маршрутизатор / индекс. js:
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from './view/Home.vue'
import Login from './view/Login.vue'
import PageContainer './container/PageContainer.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/login',
name: 'login',
component: Login
},
path: '/',
component: () => import('../container/PageContainer.vue'),
children: [
{
path: '',
name: "home",
component: () => Home
},
{
path: '*',
redirect: '/'
}
]
]
const router = new VueRouter({
mode: "history",
routes
})
router.beforeEach((to, from, next) => {
// redirect to login page if not logged in and trying to access a restricted page
const publicPages = ['/login'];
const authRequired = !publicPages.includes(to.path);
const loggedIn = localStorage.getItem('token');
if (authRequired && !loggedIn) {
return next('/login');
}
next();
})
export default router
PageContainer:
<template>
<div class="container">
<Header/>
<div class="main">
<Navbar/>
<section class="page">
<router-view/>
</section>
</div>
</div>
</template>
<script>
import Navbar from './Navbar.vue'
import Header from './Header.vue'
export default {
name: "container",
components: {
Navbar,
Header
}
}
</script>
Если я попытаюсь go указать базовый URL, страница Login
будет правильно отображаться в соответствии с условием router.beforeEach
. После успешного входа в систему и хранения JWT он:
Мне нравится версия решения с маршрутизатором больше, чем v-if
, которая заставляет меня проверять токен, говорит, что пользователь уже существует или нет, и в зависимости от того, какие страницы отображаются , но это не правильно? Я попробовал кучу других глупостей, пытаясь заставить его работать, но безрезультатно.
Я относительно новичок в Vue, так что любой вклад будет оценен. Спасибо