当前位置:首页 > VUE

vue实现jwt

2026-01-13 01:58:49VUE

Vue 中实现 JWT 认证的步骤

安装依赖 需要安装 axios 用于 HTTP 请求和 jsonwebtoken 用于 JWT 解码(前端通常只需存储和发送 Token,解码更多由后端完成)。

npm install axios jsonwebtoken

登录请求与 Token 存储 在登录页面中,通过 API 请求获取 JWT Token 并存储到本地(如 localStorage 或 Vuex)。

vue实现jwt

import axios from 'axios';

export default {
  methods: {
    async login() {
      try {
        const response = await axios.post('/api/login', {
          username: this.username,
          password: this.password
        });
        const token = response.data.token;
        localStorage.setItem('jwt_token', token);
        axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
        this.$router.push('/dashboard');
      } catch (error) {
        console.error('Login failed:', error);
      }
    }
  }
};

请求拦截器 通过 axios 拦截器自动为每个请求添加 Authorization 头。

vue实现jwt

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

路由守卫 使用 Vue Router 的导航守卫保护需要认证的路由。

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('jwt_token');
  if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
    next('/login');
  } else {
    next();
  }
});

Token 过期处理 在响应拦截器中检查 Token 是否过期(需后端返回特定状态码,如 401)。

axios.interceptors.response.use(response => response, error => {
  if (error.response.status === 401) {
    localStorage.removeItem('jwt_token');
    router.push('/login');
  }
  return Promise.reject(error);
});

注意事项

  • 安全性:避免在客户端存储敏感信息,JWT 应通过 HttpOnly Cookie 或安全存储方式传递。
  • 后端协作:确保后端正确配置 CORS 和 JWT 签发/验证逻辑。
  • 刷新 Token:实现无感刷新机制,通过拦截 401 错误并尝试用 Refresh Token 获取新 Token。

示例代码结构

src/
├── utils/
│   └── auth.js       # 封装 Token 操作
├── router/
│   └── index.js      # 路由守卫配置
├── services/
│   └── api.js        # axios 实例与拦截器
└── views/
    ├── Login.vue     # 登录页面
    └── Dashboard.vue # 受保护页面

标签: vuejwt
分享给朋友:

相关文章

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue 实现原理

vue 实现原理

Vue 实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现原理的核心要点: 响应式系统 Vu…

vue实现popover

vue实现popover

Vue 实现 Popover 的方法 使用第三方库(如 Element UI、Ant Design Vue) 许多成熟的 UI 库已经内置了 Popover 组件,可以直接调用。 Element U…

vue滚动加载实现

vue滚动加载实现

vue滚动加载实现 滚动加载是一种常见的优化手段,通过监听滚动事件动态加载数据,减少初始渲染压力。以下是几种实现方式: 使用IntersectionObserver API Intersection…

vue实现http拦截

vue实现http拦截

Vue 实现 HTTP 拦截 在 Vue 项目中,通常通过 Axios 实现 HTTP 拦截功能,用于统一处理请求和响应。以下是具体实现方法: 安装 Axios 通过 npm 或 yarn 安装 A…

订单 vue实现

订单 vue实现

Vue 实现订单功能 在 Vue 中实现订单功能通常涉及以下几个核心模块:订单列表展示、订单详情查看、订单状态管理以及订单提交。以下是一个基于 Vue 的订单功能实现方案。 订单数据结构 订单数据通…