vue3配置permission.js和router、pinia實(shí)現(xiàn)路由攔截的簡(jiǎn)單步驟
場(chǎng)景
網(wǎng)站中,通常用戶登錄后后端返回token給前端,前端存儲(chǔ)在本地并且在每次發(fā)送請(qǐng)求時(shí)攜帶,如果用戶未登錄(沒有token)就想訪問網(wǎng)站內(nèi)部的網(wǎng)頁,我們就需要做對(duì)應(yīng)攔截。
配置Pinia
首先命令行下載pinia
pnpm install pinia
src中新建一個(gè)stores目錄,其中根據(jù)自己的需要進(jìn)行編寫,推薦如下的目錄結(jié)構(gòu)

其中user.js就是存放自己需要存儲(chǔ)化的數(shù)據(jù)(名字可以自定義),而index.js是為了統(tǒng)一導(dǎo)出pinia
//index.js
import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'
// 創(chuàng)建 pinia 實(shí)例
const pinia = createPinia()
// 使用持久化存儲(chǔ)插件
pinia.use(persist)
// 默認(rèn)導(dǎo)出,給 main.js 使用
export default pinia
// 模塊統(tǒng)一導(dǎo)出
export * from './modules/member'
user.js中(示例)
import { defineStore } from 'pinia'
import { ref } from 'vue'
//用戶模塊 token setToken removeToken
export const useUserStore = defineStore(
'useMemberStore',
() => {
//用戶信息
const userInfo = ref({})
const setUserInfo = (data) => {
userInfo.value = data
}
//退出登錄時(shí)
const removeUserInfo = () => {
userInfo.value = {}
}
return {
userInfo,
setUserInfo,
removeUserInfo
}
},
{
persist: true
}
)main.js文件中同樣需要進(jìn)行配置
// 注冊(cè)持久化插件
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
const app = createApp(App)
const pinia = createPinia()
// 注冊(cè)持久化插件
pinia.use(piniaPluginPersistedstate)
app.use(pinia)
配置permission.js
router的配置就不再過多介紹了,很簡(jiǎn)單,在router文件夾中新建一個(gè)permission.js文件,其中如下內(nèi)容
import router from './index' // 引入主路由模塊
import { useUserStore } from '@/stores/modules/user'//pinia持久化的信息
const whiteList = ['/login'] // 不需要鑒權(quán)的路由白名單
router.beforeEach(async (to, from, next) => {
//useUserStore需要根據(jù)你實(shí)際定義的Pinia來
const userStore = useUserStore()
// 如果用戶已經(jīng)登錄,則直接放行
if (userStore.userInfo.token) {
next()
return
}
// 如果用戶未登錄并且目標(biāo)路由不在白名單中
if (!userStore.userInfo.toke && !whiteList.includes(to.path)) {
// 重定向到登錄頁
next(`/login?redirect=${to.path}`)
} else {
// 目標(biāo)路由在白名單中,直接放行
next()
}
})
export default router
main.js中記得引入
import '@/router/permission.js'
現(xiàn)在就可以實(shí)現(xiàn)對(duì)未登錄(沒有token)的用戶訪問進(jìn)行攔截了
總結(jié)
到此這篇關(guān)于vue3配置permission.js和router、pinia實(shí)現(xiàn)路由攔截的文章就介紹到這了,更多相關(guān)vue3實(shí)現(xiàn)路由攔截內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-router跳轉(zhuǎn)時(shí)打開新頁面的兩種方法
這篇文章主要給大家介紹了關(guān)于vue-router跳轉(zhuǎn)時(shí)打開新頁面的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue-router具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
vue之el-tree懶加載數(shù)據(jù)并且實(shí)現(xiàn)樹的過濾問題
這篇文章主要介紹了vue之el-tree懶加載數(shù)據(jù)并且實(shí)現(xiàn)樹的過濾問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Vue + Webpack + Vue-loader學(xué)習(xí)教程之相關(guān)配置篇
這篇文章主要介紹了關(guān)于Vue + Webpack + Vue-loader的相關(guān)配置篇,文中通過示例代碼介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-03-03
vue單頁面如何通過prerender-spa-plugin插件進(jìn)行SEO優(yōu)化
這篇文章主要介紹了vue單頁面如何通過prerender-spa-plugin插件進(jìn)行SEO優(yōu)化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
vue-cli啟動(dòng)本地服務(wù)局域網(wǎng)不能訪問的原因分析
這篇文章主要介紹了vue-cli啟動(dòng)本地服務(wù),局域網(wǎng)下訪問不到的原因分析,在文中還給大家介紹了vue-cli起的webpack項(xiàng)目 用localhost可以訪問,但是切換到ip就不可以訪問 的原因,本文給大家介紹的非常詳細(xì),需要的朋友參考下2018-01-01
vue進(jìn)行下載與處理二進(jìn)制流文件的方法詳解
這篇文章主要為大家詳細(xì)介紹了vue如何實(shí)現(xiàn)將后端返回的二進(jìn)制流進(jìn)行處理并實(shí)現(xiàn)下載,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
vue.js集成echarts時(shí)遇到的一些問題總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于vue.js集成echarts遇到的一些問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

