当前位置:首页 > VUE

vue实现jwt

2026-03-27 18:57:25VUE

Vue 实现 JWT 认证

安装依赖

需要安装 jsonwebtokenaxios 来处理 JWT 和 HTTP 请求:

npm install jsonwebtoken axios

生成和验证 JWT

使用 jsonwebtoken 生成和验证 token:

const jwt = require('jsonwebtoken');
const secretKey = 'your-secret-key';

// 生成 token
const token = jwt.sign({ userId: 123 }, secretKey, { expiresIn: '1h' });

// 验证 token
jwt.verify(token, secretKey, (err, decoded) => {
  if (err) {
    console.error('Invalid token');
  } else {
    console.log('Decoded token:', decoded);
  }
});

前端存储 Token

将 JWT 存储在 localStoragesessionStorage 中:

localStorage.setItem('token', token);
const storedToken = localStorage.getItem('token');

发送 Token 到后端

使用 axios 拦截器将 token 添加到请求头:

import axios from 'axios';

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

路由守卫

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

import router from './router';

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

后端验证

后端需要验证 JWT 的有效性,可以使用 Express 中间件:

const jwt = require('jsonwebtoken');
const secretKey = 'your-secret-key';

function authenticateToken(req, res, next) {
  const token = req.headers['authorization']?.split(' ')[1];
  if (!token) return res.sendStatus(401);

  jwt.verify(token, secretKey, (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
    next();
  });
}

app.get('/protected', authenticateToken, (req, res) => {
  res.json({ message: 'Protected data' });
});

刷新 Token

当 token 过期时,可以使用 refresh token 获取新的 access token:

function refreshToken(refreshToken) {
  return axios.post('/refresh-token', { refreshToken })
    .then(response => {
      localStorage.setItem('token', response.data.accessToken);
      return response.data.accessToken;
    });
}

错误处理

处理 token 过期或无效的情况:

axios.interceptors.response.use(response => response, error => {
  if (error.response.status === 401) {
    // 处理 token 过期或无效
    localStorage.removeItem('token');
    window.location.href = '/login';
  }
  return Promise.reject(error);
});

注销处理

清除本地存储的 token 并重定向到登录页面:

vue实现jwt

function logout() {
  localStorage.removeItem('token');
  window.location.href = '/login';
}

以上步骤涵盖了在 Vue 中实现 JWT 认证的主要流程,包括生成、存储、发送和验证 token,以及处理 token 过期和注销。

标签: vuejwt
分享给朋友:

相关文章

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…

vue 实现聊天

vue 实现聊天

使用 Vue 实现聊天功能 创建 Vue 项目并安装依赖 确保已安装 Vue CLI,通过以下命令创建新项目: vue create chat-app 进入项目目录后,安装必要的依赖(如 Socke…

vue实现销售程序

vue实现销售程序

Vue实现销售程序的基本步骤 搭建Vue项目基础结构 使用Vue CLI或Vite初始化项目,安装必要依赖(如Vue Router、Vuex/Pinia、Element UI/Ant Design V…

vue实现全选下载

vue实现全选下载

Vue实现全选下载功能 全选下载功能通常涉及前端文件列表的多选操作和批量下载逻辑。以下是基于Vue的实现方案: 数据准备与渲染 在Vue组件中定义文件列表数据和选中状态: data() { r…