当前位置:首页 > 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实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model 指…

vue组件实现

vue组件实现

Vue 组件实现基础 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。组件的实现包括定义、注册、数据传递和生命周期管理等。 定义组件 组件可以通过单文件组件(.…

vue 实现打印

vue 实现打印

Vue 实现打印功能的方法 在Vue项目中实现打印功能,可以通过以下几种方式实现: 使用window.print()方法 通过调用浏览器的原生打印API实现基础打印功能,适用于简单内容打印。 //…

vue实现录像

vue实现录像

Vue 实现录像功能 在 Vue 中实现录像功能通常需要借助浏览器的 MediaDevices API 和 MediaRecorder API。以下是实现步骤: 获取用户摄像头和麦克风权限 使用 n…

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入队…

vue实现checkbox

vue实现checkbox

Vue 实现 Checkbox 在 Vue 中实现 Checkbox 可以通过原生 HTML 的 <input type="checkbox"> 或使用 Vue 的 v-model 指令绑…