vue路由實現(xiàn)登錄攔截
一、概述
在項目開發(fā)中每一次路由的切換或者頁面的刷新都需要判斷用戶是否已經(jīng)登錄,前端可以判斷,后端也會進(jìn)行判斷的,我們前端最好也進(jìn)行判斷。
vue-router提供了導(dǎo)航鉤子:全局前置導(dǎo)航鉤子 beforeEach和全局后置導(dǎo)航鉤子 afterEach,他們會在路由即將改變前和改變后進(jìn)行觸發(fā)。所以判斷用戶是否登錄需要在beforeEach導(dǎo)航鉤子中進(jìn)行判斷。
導(dǎo)航鉤子有3個參數(shù):
1、to:即將要進(jìn)入的目標(biāo)路由對象;
2、from:當(dāng)前導(dǎo)航即將要離開的路由對象;
3、next :調(diào)用該方法后,才能進(jìn)入下一個鉤子函數(shù)(afterEach)。
next()//直接進(jìn)to 所指路由
next(false) //中斷當(dāng)前路由
next('route') //跳轉(zhuǎn)指定路由
next('error') //跳轉(zhuǎn)錯誤路由
二、路由導(dǎo)航守衛(wèi)實現(xiàn)登錄攔截
這里用一個空白的vue項目來演示一下,主要有2個頁面,分別是首頁和登錄。
訪問首頁時,必須要登錄,否則跳轉(zhuǎn)到登錄頁面。
新建一個空白的vue項目,在src\components創(chuàng)建Login.vue
<template>
<div>這是登錄頁面</div>
</template>
<script>
export default {
name: "Login"
}
</script>
<style scoped>
</style>
修改src\router\index.js
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Login from '@/components/Login'
Vue.use(Router)
const router = new Router({
mode: 'history', //去掉url中的#
routes: [
{
path: '/login',
name: 'login',
meta: {
title: '登錄',
requiresAuth: false, // false表示不需要登錄
},
component: Login
},
{
path: '/',
name: 'HelloWorld',
meta: {
title: '首頁',
requiresAuth: true, // true表示需要登錄
},
component: HelloWorld
},
]
})
// 路由攔截,判斷是否需要登錄
router.beforeEach((to, from, next) => {
if (to.meta.title) {
//判斷是否有標(biāo)題
document.title = to.meta.title;
}
// console.log("title",document.title)
// 通過requiresAuth判斷當(dāng)前路由導(dǎo)航是否需要登錄
if (to.matched.some(record => record.meta.requiresAuth)) {
let token = localStorage.getItem('token')
// console.log("token",token)
// 若需要登錄訪問,檢查是否為登錄狀態(tài)
if (!token) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
} else {
next() // 確保一定要調(diào)用 next()
}
})
export default router;
說明:
在每一個路由中,加入了meta。其中requiresAuth字段,用來標(biāo)識是否需要登錄。
在router.beforeEach中,做了token判斷,為空時,跳轉(zhuǎn)到登錄頁面。
訪問首頁
http://localhost:8080
會跳轉(zhuǎn)到
http://localhost:8080/login?redirect=%2F
效果如下:

打開F12,進(jìn)入console,手動寫入一個token
localStorage.setItem('token', '12345678910')
效果如下:

再次訪問首頁,就可以正常訪問了。

打開Application,刪除Local Storage里面的值,右鍵,點擊Clear即可

刷新頁面,就會跳轉(zhuǎn)到登錄頁面。
怎么樣,是不是很簡單呢!
以上就是vue路由實現(xiàn)登錄攔截的詳細(xì)內(nèi)容,更多關(guān)于vue 登錄攔截的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue3.0+element表格獲取每行數(shù)據(jù)代碼示例
這篇文章主要給大家介紹了關(guān)于vue3.0+element表格獲取每行數(shù)據(jù)的相關(guān)資料,在element-ui中,你可以通過為表格的行綁定單擊事件來獲取表格中的一行數(shù)據(jù),需要的朋友可以參考下2023-09-09
淺談webpack SplitChunksPlugin實用指南
這篇文章主要介紹了淺談webpack SplitChunksPlugin實用指南,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
Vue3中watch監(jiān)聽對象的屬性值(監(jiān)聽源必須是一個getter函數(shù))
這篇文章主要介紹了Vue3中watch監(jiān)聽對象的屬性值,監(jiān)聽源必須是一個getter函數(shù),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12
解決項目vite1.0升級到2.0打包遇到Some chunks are larger問題
本文主要介紹了解決項目vite1.0升級到2.0打包遇到Some chunks are larger問題,文中根據(jù)實例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Vue利用AJAX請求獲取XML文件數(shù)據(jù)的操作方法
在現(xiàn)代Web開發(fā)中,從前端框架到后端API的交互是必不可少的一部分,Vue.js作為一個輕量級且功能強(qiáng)大的前端框架,支持多種方式與服務(wù)器通信,從而獲取或發(fā)送數(shù)據(jù),本文將詳細(xì)介紹如何在Vue.js項目中使用AJAX請求來獲取XML格式的數(shù)據(jù),需要的朋友可以參考下2024-09-09
Vue?+?element-ui?背景圖片設(shè)置方式
這篇文章主要介紹了Vue?+?element-ui?背景圖片設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08

