路由攔截和路由守衛
阿新 • • 發佈:2021-01-08
在vue中,為確保使用者登入,使用路由攔截器或者路由守衛判斷登入狀態,並判斷和處理情況。
路由守衛是什麼?
官方文件的解釋是:
如果(能獲取到這個老哥的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()
}
})
可以用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 } }, 案例三: 思路:【 如果(即將進入的這個路由需要許可權才能進入){