vue3配置permission.js和router、pinia实现路由拦截

场景

网站中,通常用户登录后后端返回token给前端,前端存储在本地并且在每次发送请求时携带,如果用户未登录(没有token)就想访问网站内部的网页,我们就需要做对应拦截。

配置Pinia

首先命令行下载pinia

pnpm install pinia

src中新建一个stores目录,其中根据自己的需要进行编写,推荐如下的目录结构
在这里插入图片描述其中user.js就是存放自己需要存储化的数据(名字可以自定义),而index.js是为了统一导出pinia

//index.js
import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'

// 创建 pinia 实例
const pinia = createPinia()
// 使用持久化存储插件
pinia.use(persist)

// 默认导出,给 main.js 使用
export default pinia

// 模块统一导出
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文件,其中如下内容

import router from './index' // 引入主路由模块
import { useUserStore } from '@/stores/modules/user'//pinia持久化的信息

const whiteList = ['/login'] // 不需要鉴权的路由白名单

router.beforeEach(async (to, from, next) => { 
  //useUserStore需要根据你实际定义的Pinia来
  const userStore = useUserStore()
  // 如果用户已经登录,则直接放行
  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'

现在就可以实现对未登录(没有token)的用户访问进行拦截了

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue项目中,你可以按照以下步骤配置main.jsrouter.js和App.vue文件: 1. 首先,确保你的Vue项目已经安装了Vue CLI和Webpack。如果没有安装,请先执行以下命令进行安装: ``` npm install -g @vue/cli ``` 2. 创建一个新的Vue项目,并进入项目目录: ``` vue create my-project cd my-project ``` 3. 在src目录下创建一个main.js文件,并在其中添加以下代码: ```javascript import Vue from 'vue' import App from './App.vue' import router from './router' Vue.config.productionTip = false new Vue({ router, render: h => h(App) }).$mount('#app') ``` 这里导入了Vue、App.vue组件和router.js路由配置文件,并创建了一个Vue实例,将router实例注入到Vue实例中。 4. 在src目录下创建一个router.js文件,并在其中添加以下代码: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' import Home from './views/Home.vue' Vue.use(VueRouter) const routes = [ { path: '/', name: 'home', component: Home }, // 其他路由配置 ] const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) export default router ``` 这里导入了VueVueRouter,并创建了一个路由实例,定义了一个名为Home的路由组件。 5. 在src目录下创建一个App.vue文件,并在其中添加以下代码: ```vue <template> <div id="app"> <router-view></router-view> </div> </template> <script> export default { name: 'App', } </script> <style> /* 样式配置 */ </style> ``` 这里定义了一个根组件App.vue,其中使用了<router-view>标签来渲染路由组件。 6. 在项目根目录下的vue.config.js文件中,添加以下配置: ```javascript module.exports = { // 其他配置 chainWebpack: config => { config.resolve.alias.set('@', resolve('src')) } } ``` 这里的配置是为了让webpack能够正确解析@符号,使你在引入模块时可以使用@符号代替src路径。 这样,你就完成了main.jsrouter.js和App.vue配置。你可以根据需要在router.js中添加更多路由配置,以及在App.vue中添加其他组件和样式。记得在index.html中添加一个id为"app"的div元素作为Vue应用的挂载点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值