当前位置:首页 > 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实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted 和…

vue实现route

vue实现route

Vue 路由实现方法 Vue 中实现路由通常使用 vue-router 库,这是 Vue 官方推荐的路由管理器。以下是具体实现步骤: 安装 vue-router 通过 npm 或 yarn 安装…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue实现pwa

vue实现pwa

Vue 实现 PWA 的步骤 Vue 结合 PWA(Progressive Web App)可以创建离线可用的 Web 应用。以下是实现方法: 安装 Vue CLI 并创建项目 确保已安装 Vue…

vue删除实现

vue删除实现

Vue 删除功能的实现方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 方法一:使用数组的 splice 方法 通过索引删除数组中的元素,适用于列表渲染的场景。 methods: {…

vue实现评价

vue实现评价

Vue实现评价功能 数据绑定与双向绑定 Vue的核心特性是数据绑定和双向绑定,通过v-model指令可以轻松实现表单输入与应用状态之间的双向绑定。在评价功能中,可以使用v-model绑定评论文本和评分…