当前位置:首页 > VUE

vue实现jwt登录

2026-01-19 05:11:48VUE

Vue 实现 JWT 登录

安装依赖

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

npm install axios vue-router

配置 Axios 实例

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

vue实现jwt登录

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:

vue实现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 满足以下规范:

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

安全注意事项

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

标签: vuejwt
分享给朋友:

相关文章

vue实现文章锚点定位

vue实现文章锚点定位

实现文章锚点定位的方法 在Vue中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在Vu…

vue实现单点

vue实现单点

Vue 实现单点登录(SSO)方案 单点登录(SSO)允许用户在多个相关但独立的系统中使用同一组凭证登录。以下是基于 Vue 的实现方案: 基于 OAuth2/OpenID Connect 的实现…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vu…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…