我正在使用Vue2和Vue Router 3.5构建SPA应用程序
应用程序有两个身份验证路径,“admin”和“organization”
我设置了路由器,这样每个授权保护在url中都有自己的前缀
'/auth/:防护'
'/组织'
/admin
路由器文件如下所示:
const routes = [
organisations,
authRoutes,
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
在组织文件内部,我返回一个对象:
export default {
path: '/organisations',
meta: { auth: true, guard: 'organisations' },
component: () => import('../views/Organisations/OrganisationContainer.vue'),
beforeEnter: (to, from, next) => {
return store.dispatch('authentication/check')
.then(response => {
if(response) {
if(response.guard == 'admin') {
return next('/admin')
}
if(response.guard != 'organisation') {
return false
}
}else{
return next('/auth/organisation/login')
}
})
},
children: [
{
path: '/',
name: 'organisation.dash',
meta: { auth: true, route_identifier: 'dashboard', title: 'Dashboard' },
component: () => import('../views/Organisations/Dashboard/Dashboard.vue')
},
}
在以前的项目中,我使用router.beforeEach来处理系统中的导航。
路由器的问题。beforeEach是因为我不希望有一个大的方法来处理系统中每条路线的导航。如果我能有这样的东西,那就容易多了
"如果有人试图访问 /organisation路由,但他们没有登录,请将用户重定向到路由 /auth/organisation/login如果他们已登录,但他们是管理员,请将用户重定向到他们的仪表板。"
我计划在 beforeEnter 之前使用它来实现这一点 - 但是每当我尝试使用 next() 函数重定向时,都会返回一个空白的白屏。如果我返回不带参数的 next() 函数,它不会重定向,但页面仍然加载。
我可能滥用了beforeEnter导航保护——但是有谁知道我如何使用beforeEnter导航保护重定向用户,或者在不使用beforeEach并有一个大方法要处理的情况下实现类似的功能吗?
提前致谢
router.before的问题是,我不想有一个大的方法来处理系统中每条路线的导航。
这种方法没有任何问题,只要确保你的代码是快速的(不要使API调用在beford的每个),如果你有很多代码,没有什么可以阻止你把代码分成多个函数,所以它更具可读性。
但是,如果您确实不需要使用< code>beforeEach,并且您只有几条具有特定要求的路线,您可以使用< code>beforeEnter,但它与< code>beforeEach略有不同。。首先,在您提供的代码片段中,您在路由上定义了一个< code>beforeEach回调,但是beforeEach是一个路由器级回调,如docs中所述。
您必须更改代码段,将< code>beforeEach替换为< code>beforeEnter,如下所示:
export default {
path: '/organisations',
meta: { auth: true, guard: 'organisations' },
component: () => import('../views/Organisations/OrganisationContainer.vue'),
beforeEnter: (to, from, next) => {
return store.dispatch('authentication/check')
.then(response => {
if(response) {
if(response.guard == 'admin') {
return next('/admin')
}
if(response.guard != 'organisation') {
return false
}
}else{
return next('/auth/organisation/login')
}
})
},
children: [
{
path: '/',
name: 'organisation.dash',
meta: { auth: true, route_identifier: 'dashboard', title: 'Dashboard' },
component: () => import('../views/Organisations/Dashboard/Dashboard.vue')
},
}
我的 vue 路由器中有这条路由.js文件. 我使用 beforeEnter 选项重定向用户,如果store.state.is_login === true 第一个问题:所以当我在浏览器中输入网址时,我会重定向到/登录页面。这很好。但是当我单击徽标按钮时,这个beforeEnter功能不起作用。这是我的按钮,使用: 第二个问题是: is_login在我的store.state。is_login 我
我有一个用material UI设计的web应用程序,正如你们在下面看到的,我使用按钮导航来浏览我的基本登录页组件。 我曾尝试将React Router与这些预定义的导航组件一起使用,但没有成功,有没有可能将Router与材质UI的按钮导航一起使用?物料界面中的按钮导航文章ButtonNavigation API
我正在结合Vuex和vue路由器构建Vuetify应用程序。一些视图使用默认的导航抽屉,但其他视图的导航抽屉中有不同的项。这篇文档说我可以通过道具来查看组件。所以我这样实现它: 但显然, 但是<代码>
在导航到我拥有的某些路由之前,尝试找出获取某些数据的最佳方法。 我的路线是: /messages, /posts /dashboard我想获取一些数据,同时显示一个旋转器。 Vue路由器文档建议在路由器之前使用,在导航之前获取 但我的问题是,我必须在所有三个视图组件中实现这个获取逻辑吗?由于提取的是相同的数据,我不想在每个组件中重复逻辑。 在我的根组件中没有调用beForeRouteEnter,在
我想在单击登录页中的按钮后重定向到主页。但是,当我单击地址栏中的按钮时,主页的路径会显示出来(它重定向到主页)…但它不会呈现与该路径相关的组件。它仍然显示带有主页地址的登录页。因此,我必须刷新页面才能呈现主页。这里有什么问题??? 在我的登录页面中…这是我用于单击按钮的功能。。 在我的索引,js页面...