Vue Router beforeEach 未被调用
Vue Router beforeEach not being called
我目前在查找路由器代码中的错误时遇到问题,它以前有效,但我不知道我何时或如何破坏它的。我已经签入了旧版本,但它似乎没有改变。问题是,即使我从路由器中的 beforeEach Hook 中删除所有代码并仅使用 console.log() 语句,控制台中也不会打印任何内容,因此我的 auth-guard 无法正常工作。我试图根据此更改顺序:https://forum.vuejs.org/t/router-beforeeach-if-manually-input-adress-in-browser-it-does-not-work/12461/3 但没有任何改变。
我有以下代码:
router/index.js
router.beforeEach = (to, from, next) => {
console.log('he?')
const currentUser = Firebase.auth().currentUser
const isGold = store.getters['user/isGold']
const requiresAuth = to.matched.some(route => route.meta.requiresAuth)
const requiresGold = to.matched.some(route => route.meta.requiresGold)
console.log(requiresGold, isGold, 'halloooooooo?')
if (currentUser && to.name === 'Login') {
next('/dashboard')
}
if (requiresGold && !isGold) {
console.log('trigger')
}
if (requiresAuth && !currentUser) {
next('/login')
} else {
next(false)
}
}
main.js
Firebase.auth().onAuthStateChanged(user => {
if (user) {
const getToken = () => {
return user.getIdToken(true).then(token => {
store.dispatch('user/setToken', token)
})
}
getToken().then(() => {
store.dispatch('user/setUser')
setInterval(getToken, 3540 * 1000)
})
}
new Vue({
el: '#app',
store,
router,
template: '<App/>',
components: { App }
})
})
在此先感谢您的帮助!
您没有分配给 router.beforeEach
。 router.beforeEach
是一个方法,你用一个函数来调用它。 (docs) 这就是你应该如何使用路由器导航卫士:
router.beforeEach((to, from, next) => {
console.log('he?')
const currentUser = Firebase.auth().currentUser
const isGold = store.getters['user/isGold']
const requiresAuth = to.matched.some(route => route.meta.requiresAuth)
const requiresGold = to.matched.some(route => route.meta.requiresGold)
console.log(requiresGold, isGold, 'halloooooooo?')
if (currentUser && to.name === 'Login') {
next('/dashboard')
}
if (requiresGold && !isGold) {
console.log('trigger')
}
if (requiresAuth && !currentUser) {
next('/login')
} else {
next(false)
}
});
我目前在查找路由器代码中的错误时遇到问题,它以前有效,但我不知道我何时或如何破坏它的。我已经签入了旧版本,但它似乎没有改变。问题是,即使我从路由器中的 beforeEach Hook 中删除所有代码并仅使用 console.log() 语句,控制台中也不会打印任何内容,因此我的 auth-guard 无法正常工作。我试图根据此更改顺序:https://forum.vuejs.org/t/router-beforeeach-if-manually-input-adress-in-browser-it-does-not-work/12461/3 但没有任何改变。
我有以下代码:
router/index.js
router.beforeEach = (to, from, next) => {
console.log('he?')
const currentUser = Firebase.auth().currentUser
const isGold = store.getters['user/isGold']
const requiresAuth = to.matched.some(route => route.meta.requiresAuth)
const requiresGold = to.matched.some(route => route.meta.requiresGold)
console.log(requiresGold, isGold, 'halloooooooo?')
if (currentUser && to.name === 'Login') {
next('/dashboard')
}
if (requiresGold && !isGold) {
console.log('trigger')
}
if (requiresAuth && !currentUser) {
next('/login')
} else {
next(false)
}
}
main.js
Firebase.auth().onAuthStateChanged(user => {
if (user) {
const getToken = () => {
return user.getIdToken(true).then(token => {
store.dispatch('user/setToken', token)
})
}
getToken().then(() => {
store.dispatch('user/setUser')
setInterval(getToken, 3540 * 1000)
})
}
new Vue({
el: '#app',
store,
router,
template: '<App/>',
components: { App }
})
})
在此先感谢您的帮助!
您没有分配给 router.beforeEach
。 router.beforeEach
是一个方法,你用一个函数来调用它。 (docs) 这就是你应该如何使用路由器导航卫士:
router.beforeEach((to, from, next) => {
console.log('he?')
const currentUser = Firebase.auth().currentUser
const isGold = store.getters['user/isGold']
const requiresAuth = to.matched.some(route => route.meta.requiresAuth)
const requiresGold = to.matched.some(route => route.meta.requiresGold)
console.log(requiresGold, isGold, 'halloooooooo?')
if (currentUser && to.name === 'Login') {
next('/dashboard')
}
if (requiresGold && !isGold) {
console.log('trigger')
}
if (requiresAuth && !currentUser) {
next('/login')
} else {
next(false)
}
});