1. 程式人生 > 實用技巧 >路由攔截和路由守衛

路由攔截和路由守衛

在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 storefrom'@/assets/store'//把這個userId獲取過來 router.beforeEach((to,from,next)=>{ if(to.meta.requireAuth){ if(store.state.userId){ next() }else{ next({path:'/b'})
} }else{ next() } })