Javascript 从路由保护重定向和从组件内已安装的()生命周期挂钩重定向之间是否有区别?

Javascript 从路由保护重定向和从组件内已安装的()生命周期挂钩重定向之间是否有区别?,javascript,vue.js,vuejs2,vue-component,vue-router,Javascript,Vue.js,Vuejs2,Vue Component,Vue Router,假设有一个视图,我只希望登录用户可以访问它。我可以通过在路线上使用如下路线守卫来阻止访问: beforeEnter: (to, from, next) => { if (!store.getters.authenticated) { next({ name: "login" }) } else { next() } } 但是我想知道如果我使用if语句来确定用

假设有一个视图,我只希望登录用户可以访问它。我可以通过在路线上使用如下路线守卫来阻止访问:

    beforeEnter: (to, from, next) => {
        if (!store.getters.authenticated) {
            next({ name: "login" })
        } else {
            next()
        }
    }
但是我想知道如果我使用if语句来确定用户是否登录到我要限制的组件的mounted()生命周期钩子中,这是否是错误的

mounted(){
    if(!store.getters.authenticated){
        router.push({name: "login"})
    }
}

第二种方法有什么缺点吗?

您可以使用路由器挂钩通过存储触发身份验证

大概是这样的:

    beforeEnter: (to, from, next) => {
        if (!store.getters.authenticated) {
            next({ name: "login" })
        } else {
            next()
        }
    }
beforeinter:async(到、从、下一个)=>{
等待store.dispatch(`login`);
如果(!store.getters.authenticated){
下一步({name:`login`});
}否则{
next();
}
}

当然,组件中的自动登录逻辑必须移动到商店的操作+突变中。

这感觉有点奇怪,因为看起来你做的事情路由器可以做得很好,但你在组件内部做,所以你基本上把两者混在了一起。如果第二种方法有一个有效的用例,那么/shrugBrowser将使用内存加载并运行您的组件,因此我认为在用户未授权的情况下这样做是不正常的。@maxshuty实际上有一个原因迫使我寻找路由保护的替代方案。显然,路由保护是在App.vue代码之前实例化的,而我的自动登录用户的函数在App.vue中。因此,如果我在route guards中检查isAuthenticated,它将始终返回false,而如果我在组件中检查isAuthenticated,它将返回true。我知道这可能不是最好的方法,但我想不出另一种方法:\n您正在使用Vuex应用商店,为什么不通过应用商店自动登录您的用户,以便其他组件也可以检查身份验证?