vue中未登录页面跳转到登录页(改造vue-element-admin)

思路:
每次路由跳转时查看一下当前浏览器缓存中是否有token值,如果没有则跳转至登录页,如果有token则继续。(token值作为是否登录的标志,用于权限判断)

router.beforeEach(async(to, from, next) => {
  const _token = sessionStorage._token // 【获取token值】
  // start progress bar
  NProgress.start()

  // set page title
  document.title = getPageTitle(to.meta.title)

  // determine whether the user has logged in
  const hasToken = getToken()
  console.log('hasToken:', hasToken, _token)
  // const hasToken = ' admin-token '
  // hasToken: admin-token
  if (_token) { // 【如果有token值】
    if (to.path === '/login') {
      // if is logged in, redirect to the home page
      next({ path: '/' })
      NProgress.done() // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939
    } else {
      // determine whether the user has obtained his permission roles through getInfo
      const hasRoles = store.getters.roles && store.getters.roles.length > 0
      if (hasRoles) {
        next()
      } else {
        try {
          // get user info
          // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
          const { roles } = await store.dispatch('user/getInfo')

          // generate accessible routes map based on roles
          const accessRoutes = await store.dispatch('permission/generateRoutes', roles)

          // dynamically add accessible routes
          router.addRoutes(accessRoutes)

          // hack method to ensure that addRoutes is complete
          // set the replace: true, so the navigation will not leave a history record
          next({ ...to, replace: true })
        } catch (error) {
          // remove token and go to login page to re-login
          await store.dispatch('user/resetToken')
          Message.error(error || 'Has Error')
          next(`/login?redirect=${to.path}`)
          NProgress.done()
        }
      }
    }
  } else {
    // 如果浏览器缓存没有token值
    if (whiteList.indexOf(to.path) !== -1) {
      // 要跳转的页面属于白名单(某些页面允许任何人访问),则继续
      next()
    } else {
      // 如果没有权限且要访问的页面需要权限,则跳转到登录页面
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})

// 在登录页面获取token值

publicAPI.loginAPI({ loginName: username, loginPassword: password }).then(response => {
        const res = response
        console.log('loginAPI response.data', response)
        if (res.code === '200') {
          sessionStorage.setItem('_token', res.data.sessionId) // 【token值存入浏览器缓存】
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值