这是我的mixin
export default {
created () {
if (!this.$store.getters.isAuthenticated) {
this.$router.replace('/start')
}
}
}
这是我的组成部分: -
import Auth from '../auth'
export default {
mixins: [Auth],
computed: {
orders () {
return this.$store.getters.orders
}
},
mounted () {
this.$store.dispatch('getOrders')
}
}
商店: -
async getOrders ({ commit, state }) {
const res = await axios.get(`${API_URL}/orders`, {
headers: {
'authorization': state.currentUser.token
}
})
commit('setOrders', res.data)
}
我遇到的问题是,虽然当我转到'/start'
时它确实重定向到'/orders'
,但它也开始从mounted
挂钩获取订单,并且从{{1如果为currentUser
,则TypeError
为Cannot read property 'token' of null
。虽然我可以通过检查是否设置getOrders
来保护currentUser
函数,但是我必须在许多其他函数中执行此操作。我想要发生的是,created
挂钩不应该被调用或任何其他任何人都知道更好的技术?
答案 0 :(得分:0)
你可以使用路由功能beforeRouteEnter
,如果app没有被authed,你可以在进入页面之前重定向到其他页面需要auth
答案 1 :(得分:0)
使用global navigation guards进行身份验证,而不是检查用户。
您可以使用beforeEach
或beforeResolve
来检查currentUser
是否为空。
import store from './store'; // import your Vuex store
const router = new VueRouter({
routes: [{
name: 'orders',
path: '/orders',
meta: {
requiresAuth: true // use this in the routes that need your currentUser
}
}],
});
router.beforeResolve((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!this.$store.getters.isAuthenticated || !store.state.currentUser) {
next({
name: 'forbidden' // the route the guest will be redirected to
});
} else {
next();
}
} else {
next();
}
});
export default router;