当前位置:首页 > 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实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDia…

vue实现主题

vue实现主题

Vue 实现主题的方法 使用 CSS 变量动态切换主题 定义全局 CSS 变量,通过修改这些变量实现主题切换。在 Vue 的根组件或全局样式中定义变量: :root { --primary-co…

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-for…

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template&g…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <template&…