当前位置:首页 > VUE

vue实现token

2026-03-27 12:38:02VUE

Vue 中实现 Token 认证的步骤

安装依赖
在项目中安装 axiosvue-router(如未安装):

npm install axios vue-router

配置 Axios 拦截器
src 目录下创建 utils/http.js,设置请求和响应拦截器,自动携带 Token 并处理 401 错误:

vue实现token

import axios from 'axios';

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

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

http.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      localStorage.removeItem('token');
      window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

export default http;

登录逻辑
在登录组件中调用接口并存储 Token:

vue实现token

import http from '../utils/http';

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

路由守卫
src/router/index.js 中配置全局前置守卫,保护需要认证的路由:

import VueRouter from 'vue-router';

const routes = [
  { path: '/login', component: Login },
  { path: '/dashboard', component: Dashboard, meta: { requiresAuth: true } }
];

const router = new VueRouter({ routes });

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token');
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login');
  } else {
    next();
  }
});

Token 刷新(可选)
若需实现 Token 过期自动刷新,可在响应拦截器中添加逻辑:

http.interceptors.response.use(
  response => response,
  async error => {
    const originalRequest = error.config;
    if (error.response.status === 401 && !originalRequest._retry) {
      originalRequest._retry = true;
      const res = await http.post('/refresh-token', { 
        refreshToken: localStorage.getItem('refreshToken') 
      });
      localStorage.setItem('token', res.data.token);
      return http(originalRequest);
    }
    return Promise.reject(error);
  }
);

关键注意事项

  • 安全存储:避免使用 localStorage 存储敏感信息,生产环境建议结合 HttpOnly Cookie。
  • 过期处理:前端需根据后端返回的过期时间主动清理 Token。
  • 跨域问题:确保 API 服务配置 CORS,允许前端域名的请求头携带 Authorization

标签: vuetoken
分享给朋友:

相关文章

vue聊天实现

vue聊天实现

Vue 聊天应用实现步骤 创建 Vue 项目 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖(如 Vue 3、Element UI 或 Vuetify 用于 UI 组件)。 npm c…

vue vnode实现

vue vnode实现

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

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…

vue实现例子

vue实现例子

以下是一些常见的 Vue 实现例子,涵盖基础功能到进阶应用场景: 基础数据绑定 使用 v-model 实现双向数据绑定: <template> <div> &l…