当前位置:首页 > VUE

vue实现jwt登录

2026-01-19 05:11:48VUE

Vue 实现 JWT 登录

安装依赖

确保项目中已安装 axiosvue-router。若未安装,可通过以下命令安装:

npm install axios vue-router

配置 Axios 实例

src 目录下创建 utils/axios.js 文件,配置全局 Axios 实例并设置请求拦截器:

import axios from 'axios';

const instance = axios.create({
  baseURL: 'http://your-api-base-url.com',
});

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

export default instance;

登录逻辑实现

在登录组件中调用 API 并处理 JWT 返回:

import axios from '../utils/axios';

export default {
  data() {
    return {
      username: '',
      password: '',
    };
  },
  methods: {
    async login() {
      try {
        const response = await axios.post('/auth/login', {
          username: this.username,
          password: this.password,
        });
        localStorage.setItem('token', response.data.token);
        this.$router.push('/dashboard');
      } catch (error) {
        console.error('登录失败:', error);
      }
    },
  },
};

路由守卫配置

src/router/index.js 中配置全局前置守卫,验证 JWT:

import Vue from 'vue';
import Router from 'vue-router';
import axios from '../utils/axios';

Vue.use(Router);

const router = new Router({
  routes: [
    { path: '/login', component: () => import('@/views/Login.vue') },
    { path: '/dashboard', component: () => import('@/views/Dashboard.vue'), meta: { requiresAuth: true } },
  ],
});

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    const token = localStorage.getItem('token');
    if (!token) {
      next('/login');
    } else {
      axios.get('/auth/validate').then(() => {
        next();
      }).catch(() => {
        localStorage.removeItem('token');
        next('/login');
      });
    }
  } else {
    next();
  }
});

export default router;

注销功能

在需要注销的组件中添加清除 JWT 的逻辑:

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

后端 API 要求

确保后端 API 满足以下规范:

vue实现jwt登录

  • 登录接口 /auth/login 返回 { token: 'jwt-token-string' }
  • 验证接口 /auth/validate 返回 HTTP 200 状态码(验证通过)或 401(验证失败)

安全注意事项

  • 使用 HTTPS 协议传输敏感数据
  • 避免在客户端存储敏感信息
  • 设置合理的 JWT 过期时间
  • 考虑实现刷新令牌机制

标签: vuejwt
分享给朋友:

相关文章

vue  select实现

vue select实现

Vue Select 实现方法 在 Vue 中实现下拉选择功能可以使用原生 <select> 标签或第三方库如 vue-select。以下是两种方法的详细说明: 原生 HTML Sele…

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构 V…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue 实现上传

vue 实现上传

Vue 实现文件上传 使用 Vue 实现文件上传可以通过原生 HTML 的 <input type="file"> 或第三方库(如 axios、vue-upload-component)完…

vue导航实现

vue导航实现

Vue 导航实现方法 在 Vue 中实现导航功能通常涉及路由配置、组件设计和状态管理。以下是几种常见的实现方式: 使用 Vue Router 实现基础导航 安装 Vue Router: npm i…