关于vue路由,必须登录才能进去的问题

做项目的时候,有好多页面都是需要登录才能进去的,那么我们可以通过两种方式来实现:
第一种,通过添加白名单的方式.
在permission.js 中添加 const whiteList = [’/login’, ‘/404’] ,[] 里面写白名单路由。
然后在下面进行判断,直接上代码:

  router.beforeEach((to, from, next) => {
    NProgress.start()
    if (getToken()) { //首先判断token 是否为真,
    
        if (to.path === '/login') {
            next({ path: '/' })
            NProgress.done() // 结束Progress
        } else if (!store.getters.role) {
            console.log("is:" + store.getters.role);
            store.dispatch('GetInfo').then(() => {
                next({...to })
            })
        } else {
            next()
        }
    } else if (whiteList.indexOf(to.path) !== -1) {
        //如果前往的路径是白名单内的,就可以直接前往
        next()
    } else {
        //如果路径不是白名单内的,而且又没有登录,就跳转登录页面
        next('/login')
        NProgress.done() // 结束Progress
    }
})

第二种方式,由于做h5 项目的时候,有大部分页面是不需要登陆的,大部分涉及个人操作的页面才需要登录,所以 可通过在路由的页面,添加标识来区分页面是否登陆。该方法主要修改 router/index.js, 看图:
在这里插入图片描述
本例我通过添加了 meta 的requierAuth 来区分,如果是false 则不需要登陆,如果为true 则需要登录。修改完路由之后,需要在permission.js 中进行路由过滤。

router.beforeEach((to, from, next) => {
    window.sessionStorage.formQuery = from.path; //记录路由,登录后从哪来让他到哪去
    NProgress.start()
    if (getToken()) {
        //如果已经登录
        if (to.path === '/login') {
            next({ path: '/' })
            NProgress.done() // 结束Progress
        } else {
            // alert()
            next()
        }
    } else if (!to.meta.requireAuth) {
        //如果requireAuth 为false 则直接进入路由
        next()
    } else {
        //如果路径不是白名单内的,而且又没有登录,就跳转登录页面
        next('/login')
        NProgress.done() // 结束Progress
    }
})
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中实现登录后的页面跳转有多种方式,以下是其中一种常见的方法: 1. 首,你需要在Vue项目中安装`vue-router`,可以通过以下命令进行安装: ```bash npm install vue-router ``` 2. 在你的Vue项目中创建一个路由文件(通常命名为`router.js`或者`index.js`),并配置路由信息。在路由配置中,你可以使用`beforeEach`导航守卫来检查用户是否已登录。如果用户已登录,则允许页面跳转,否则将用户重定向到登录页面。 ```javascript import Vue from 'vue'; import Router from 'vue-router'; import Home from './views/Home.vue'; import Login from './views/Login.vue'; Vue.use(Router); const router = new Router({ routes: [ { path: '/', name: 'home', component: Home, meta: { requiresAuth: true // 设置需要登录才能访问的页面 }, }, { path: '/login', name: 'login', component: Login, }, ], }); router.beforeEach((to, from, next) => { const isLoggedIn = ... // 根据你的登录状态判断用户是否已登录 if (to.matched.some(record => record.meta.requiresAuth) && !isLoggedIn) { next('/login'); // 如果需要登录才能访问的页面登录,则重定向到登录页 } else { next(); // 允许页面跳转 } }); export default router; ``` 3. 在主Vue实例中引入路由配置,并将路由挂载到Vue实例中: ```javascript import Vue from 'vue'; import App from './App.vue'; import router from './router'; new Vue({ router, render: h => h(App), }).$mount('#app'); ``` 在上述代码中,`Home`组件是需要登录才能访问的页面,`Login`组件是登录页面。通过设置路由的`meta`字段中的`requiresAuth`为`true`,我们标记了需要登录才能访问的页面。在导航守卫中,我们检查用户的登录状态,如果未登录且访问的页面需要登录权限,则将用户重定向到登录页面。 当用户成功登录后,你可以使用Vue Router提供的`router.push()`方法来实现页面跳转,例如: ```javascript // 登录成功后跳转到首页 this.$router.push('/'); ``` 这样,当用户登录后,页面会自动跳转到首页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值