vue用路由守卫进行登录后的路由跳转

昨天已经成功地获取到登录的token,并将token存储在session storage中,今天完成了获取到token之前与之后内容页与登录页之间的路由跳转,主要用路由守卫来实现

  • router/index.js中,将要进行拦截的页面meta中加入 loginRequest: 'true',冒号前面的变量可以自己定义,这步是为后面判断是否拦截提供依据

      {
        path: '/',
        redirect: '/index',
        component: Layout,
        meta: { title: '主页' },
        children: [{
          path: 'index',
          name: 'Index',
          meta: { title: '主页', loginRequest: 'true', hideSidebar: true, breadcrumb: false, icon: 'el-icon-menu' },
          component: () => import('@/views/home/index')
        }]
      },
    
  • main.js文件里面添加全局路由守卫(记得放在vue初始化之前,否则首次进入网页不会拦截)

    function getToken() {	// 返回token
      const ssrObj = JSON.parse(sessionStorage.getItem('vuex'))
      if (ssrObj) {
        return ssrObj.access_token
      } else {
        return
      }
    }
    
    
    router.beforeEach((to, from, next) => {
      if (to.meta.loginRequest) { // 如果路由meta中loginRequest为true,进行拦截
        if (getToken()) {
          next() // 如果已经登陆可直接进入页面
        } else { // 否则跳入登录页,并且记住要跳入的页面,以方便登陆完成后直接进入该页面
          next({
            path: '/login',
            query: {
              redirect: to.fullPath // 把要跳转的页面路径作为参数传到登录页面
            }
          })
        }
      } else {
        next() // 直接进入页面
      }
    })
    
  • 在登录页.vue ,进行路由的跳转,我直接添加在了登录请求的成功promise上

    .then(res => {
            this.$store.commit('getToken', res.data.access_token)
            if (res.data.access_token) {
              this.$message({
                showClose: true,
                message: '登陆成功',
                type: 'success'
              })
            }
            const redirect = decodeURIComponent(this.$route.query.redirect || '/') // 获得路由携带的参数
            this.$router.push({ path: redirect }) // 路由跳转
          })
    
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 中使用路由守卫可以很方便地判断用户是否已经登录,如果未登录跳转登录页面。以下是一个简单的例子: ```javascript import Vue from 'vue' import Router from 'vue-router' import Login from '@/views/Login.vue' import Dashboard from '@/views/Dashboard.vue' Vue.use(Router) const router = new Router({ routes: [ { path: '/', name: 'Dashboard', component: Dashboard, meta: { requiresAuth: true // 添加 meta 属性,表示需要登录才能访问该页面 } }, { path: '/login', name: 'Login', component: Login } ] }) router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !isAuthenticated()) { // 判断该页面是否需要登录,以及用户是否已经登录 next('/login') // 如果未登录跳转登录页面 } else { next() // 否则放行 } }) function isAuthenticated () { // 判断用户是否已经登录,可以根据实际情况自行实现 return localStorage.getItem('username') !== null } export default router ``` 在上面的例子中,我们定义了两个路由,一个是 `/`,表示用户登录后进入的主页,另一个是 `/login`,表示登录页面。在定义 `/` 路由时,我们通过添加 `meta` 属性来表示该页面需要登录才能访问。在路由守卫中,我们通过调用 `isAuthenticated` 函数来判断用户是否已经登录,如果未登录跳转登录页面,否则放行。 需要注意的是,这里的 `isAuthenticated` 函数只是一个示例,需要根据实际情况自行实现。在实际开发中,我们可能需要从后台获取用户信息并保存到本地,然后通过判断本地是否有用户信息来判断用户是否已经登录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值