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

其中user.js就是存放自己需要存儲化的數(shù)據(jù)(名字可以自定義),而index.js是為了統(tǒng)一導出pinia
//index.js
import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'
// 創(chuàng)建 pinia 實例
const pinia = createPinia()
// 使用持久化存儲插件
pinia.use(persist)
// 默認導出,給 main.js 使用
export default pinia
// 模塊統(tǒng)一導出
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
}
//退出登錄時
const removeUserInfo = () => {
userInfo.value = {}
}
return {
userInfo,
setUserInfo,
removeUserInfo
}
},
{
persist: true
}
)main.js文件中同樣需要進行配置
// 注冊持久化插件
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()
// 注冊持久化插件
pinia.use(piniaPluginPersistedstate)
app.use(pinia)
配置permission.js
router的配置就不再過多介紹了,很簡單,在router文件夾中新建一個permission.js文件,其中如下內(nèi)容
import router from './index' // 引入主路由模塊
import { useUserStore } from '@/stores/modules/user'//pinia持久化的信息
const whiteList = ['/login'] // 不需要鑒權的路由白名單
router.beforeEach(async (to, from, next) => {
//useUserStore需要根據(jù)你實際定義的Pinia來
const userStore = useUserStore()
// 如果用戶已經(jīng)登錄,則直接放行
if (userStore.userInfo.token) {
next()
return
}
// 如果用戶未登錄并且目標路由不在白名單中
if (!userStore.userInfo.toke && !whiteList.includes(to.path)) {
// 重定向到登錄頁
next(`/login?redirect=${to.path}`)
} else {
// 目標路由在白名單中,直接放行
next()
}
})
export default router
main.js中記得引入
import '@/router/permission.js'
現(xiàn)在就可以實現(xiàn)對未登錄(沒有token)的用戶訪問進行攔截了
總結
到此這篇關于vue3配置permission.js和router、pinia實現(xiàn)路由攔截的文章就介紹到這了,更多相關vue3實現(xiàn)路由攔截內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
用vue的雙向綁定簡單實現(xiàn)一個todo-list的示例代碼
本篇文章主要介紹了用vue的雙向綁定簡單實現(xiàn)一個todo的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-08-08
vue循環(huán)數(shù)據(jù)v-for / v-if最后一條問題
這篇文章主要介紹了vue循環(huán)數(shù)據(jù)v-for / v-if最后一條問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
vue3中update:modelValue的使用與不生效問題解決
現(xiàn)在vue3的使用越來越普遍了,vue3這方面的學習我們要趕上,下面這篇文章主要給大家介紹了關于vue3中update:modelValue的使用與不生效問題的解決方法,需要的朋友可以參考下2022-03-03
require.js 加載 vue組件 r.js 合并壓縮的實例
這篇文章主要介紹了require.js 加載 vue組件 r.js 合并壓縮的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-10-10

