路由攔截和路由守衛


在vue中,為確保用戶登錄,使用路由攔截器或者路由守衛判斷登錄狀態,並判斷和處理情況。
 
 
路由守衛是什么?
官方文檔的解釋是:
 

 

 可以用router.beforeEach注冊一個路由守衛

const router = new VueRouter({ ... }) router.beforeEach((to, from, next) => { // ...
})
 
 注:這是一個全局路由,守衛是異步解析執行,此時導航在所有守衛 resolve 完之前一直處於等待中。
 
而三個參數分別是什么意思呢?
 

路由導航守衛

to代表我們將要訪問的路徑

from代表我們從哪個頁面路徑跳轉而來

next代表放行的函數

 

 下面用幾個案例展示:

案例一:

//為路由對象,添加before 導航守衛

router.beforeEach((to,from,next)=>{

 // 如果用戶訪問的登錄頁,直接放行

  if(to.path==='/login') return next()

   //從sessionStorage中獲取到保存的token值

  const tokenStr=window.sessionStorage.getItem('token')

   //沒有token,強制跳轉到登錄頁

if(!tokenStr) return next('/login')

 next()

})

 

 

案例二:

router.beforeEach((to, from, next) => {
    if (to.meta.istoken == true) {
        router.push('/目標地址')
        return
    }
    next()
})
{
            path: '/edit',
            component: edit,
            meta: {
                istoken: true
            }
},
 
 
 
案例三:
思路:【
  如果(即將進入的這個路由需要權限才能進入) {
        如果(能獲取到這個老哥的userID){
                就讓這個老哥進入這個路由 
        }否則{
                就讓這個老哥進入b這個頁面 
       }
 } 即將進入的路由不需要權限就能進入 {
       就讓這個老哥進入這個路由 
} 】
對應代碼:
import store from '@/assets/store' //把這個userId獲取過來
router.beforeEach((to,from,next)=>
     if(to.meta.requireAuth)
          if(store.state.userId){
             next(
          }else
            next({path:'/b'})
          
     }else
            next(
      }
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM