当前位置:首页 > VUE

vue路由实现jwt

2026-02-19 11:48:01VUE

Vue 路由实现 JWT 认证

安装依赖

确保项目中已安装 vue-router 和用于 JWT 处理的库(如 jsonwebtokenjwt-decode)。通过以下命令安装:

npm install vue-router jwt-decode

配置路由守卫

router/index.js 中设置全局前置守卫,拦截路由跳转并验证 JWT:

vue路由实现jwt

import Vue from 'vue'
import Router from 'vue-router'
import jwt_decode from 'jwt-decode'

Vue.use(Router)

const router = new Router({
  routes: [...]
})

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('jwt_token')
  const isAuthRequired = to.matched.some(route => route.meta.requiresAuth)

  if (isAuthRequired) {
    if (token) {
      try {
        const decoded = jwt_decode(token)
        const isExpired = decoded.exp < Date.now() / 1000
        isExpired ? next('/login') : next()
      } catch (error) {
        next('/login')
      }
    } else {
      next('/login')
    }
  } else {
    next()
  }
})

export default router

路由元信息配置

在路由定义中标记需要认证的页面:

{
  path: '/dashboard',
  component: Dashboard,
  meta: { requiresAuth: true }
}

登录逻辑

在登录页面中,成功获取 JWT 后存储至本地并跳转:

vue路由实现jwt

methods: {
  async handleLogin() {
    const res = await api.login(this.credentials)
    localStorage.setItem('jwt_token', res.data.token)
    this.$router.push('/dashboard')
  }
}

请求拦截

axios 拦截器中自动附加 JWT:

axios.interceptors.request.use(config => {
  const token = localStorage.getItem('jwt_token')
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

退出处理

清除本地存储的 JWT 并重定向:

methods: {
  logout() {
    localStorage.removeItem('jwt_token')
    this.$router.push('/login')
  }
}

注意事项

  • JWT 应存储在 HttpOnly Cookie 或 localStorage 中,但需注意 XSS 风险
  • 敏感路由需服务端二次验证 JWT
  • 定期检查 JWT 过期时间并刷新令牌

标签: 路由vue
分享给朋友:

相关文章

vue实现多级表头

vue实现多级表头

Vue 实现多级表头的方法 使用 el-table 组件 Element UI 的 el-table 组件支持多级表头的实现,通过嵌套 el-table-column 即可完成。 <el-ta…

动态路由的实现vue

动态路由的实现vue

动态路由的实现(Vue) 在Vue中实现动态路由通常涉及以下方法,适用于Vue Router的配置和管理: 使用路由参数 通过:定义动态路径参数,在组件中通过$route.params访问: //…

vue聊天实现

vue聊天实现

Vue 聊天应用实现步骤 创建 Vue 项目 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖(如 Vue 3、Element UI 或 Vuetify 用于 UI 组件)。 npm…

django vue实现

django vue实现

Django与Vue.js整合实现方案 Django作为后端框架与Vue.js作为前端框架的整合,可以通过以下方式实现: 分离式开发 前后端完全分离,Django仅提供API接口,Vue.js通过a…

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 Vue 的核心功能包括数据响应式、模板编译和虚拟 DOM。以下是一个简易实现方案,涵盖核心功能模块。 数据响应式系统 通过 Object.definePropert…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…