当前位置:首页 > 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中实现拍照功能通常需要结合浏览器的MediaDevices API和Canvas元素。以下是具体实现方法: 安装依赖(可选) 如果需要更简单的封装,可以安装vue-web…

vue实现订单

vue实现订单

Vue 实现订单功能 订单数据结构设计 订单数据通常包含以下字段: order: { id: String, // 订单ID userId: String,…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现menu

vue实现menu

Vue 实现 Menu 的方法 使用 Element UI 的 Menu 组件 Element UI 提供了现成的 Menu 组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用…

vue滑块实现

vue滑块实现

Vue滑块实现方法 使用原生HTML5 range input Vue中可以绑定原生HTML5的range类型input元素实现基础滑块功能: <template> <div&…