当前位置:首页 > VUE

vue实现token

2026-01-12 20:07:06VUE

Vue 中实现 Token 验证的步骤

安装必要的依赖
使用 axios 进行 HTTP 请求,vue-router 处理路由守卫,js-cookie 管理 Cookie。通过 npm 安装:

npm install axios vue-router js-cookie

配置 Axios 拦截器
在请求头中自动添加 Token,并在响应拦截器中处理 Token 过期或无效的情况:

// src/utils/request.js
import axios from 'axios';
import Cookies from 'js-cookie';

const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
});

service.interceptors.request.use(
  config => {
    const token = Cookies.get('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

service.interceptors.response.use(
  response => {
    return response.data;
  },
  error => {
    if (error.response.status === 401) {
      // Token 过期或无效,跳转到登录页
      router.push('/login');
    }
    return Promise.reject(error);
  }
);

export default service;

登录逻辑与 Token 存储
用户登录成功后,将 Token 存储到 Cookie 或 localStorage,并跳转到主页:

// src/views/Login.vue
import Cookies from 'js-cookie';
import request from '@/utils/request';

export default {
  methods: {
    handleLogin() {
      request.post('/login', this.form)
        .then(res => {
          Cookies.set('token', res.token, { expires: 7 }); // 7 天过期
          this.$router.push('/');
        });
    }
  }
};

路由守卫验证 Token
通过全局前置守卫检查用户是否已登录,未登录则重定向到登录页:

// src/router/index.js
import router from './router';
import Cookies from 'js-cookie';

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

注销功能
清除 Token 并跳转到登录页:

// src/components/Logout.vue
import Cookies from 'js-cookie';

export default {
  methods: {
    handleLogout() {
      Cookies.remove('token');
      this.$router.push('/login');
    }
  }
};

关键注意事项

  • Token 安全:避免将 Token 存储在 localStorage 中以防止 XSS 攻击,优先使用 HttpOnly Cookie。
  • 过期处理:后端应返回 401 状态码,前端拦截后强制跳转登录页。
  • 刷新 Token:可通过定时任务或拦截器自动刷新 Token,减少用户重复登录。

vue实现token

标签: vuetoken
分享给朋友:

相关文章

vue实现检测数组

vue实现检测数组

Vue 中检测数组变化的方法 Vue 的响应式系统无法直接检测到数组的某些变化,因为 JavaScript 的限制。以下是一些解决方案: 使用 Vue.set 或 this.$set Vue…

vue实现选择季度

vue实现选择季度

Vue 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <tem…

vue实现tab换行

vue实现tab换行

Vue实现Tab切换的常见方法 使用Vue实现Tab切换功能可以通过多种方式完成,以下是几种常见的方法: 动态组件结合v-if或v-show 通过v-if或v-show控制不同Tab内容的显示…

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$router…

vue 移动端实现签名

vue 移动端实现签名

Vue 移动端签名实现方法 在移动端实现签名功能,可以通过HTML5的Canvas结合触摸事件完成。以下是具体实现步骤: 使用Canvas绘制签名 安装vue-signature-pad插件或直接使…

vue怎么实现文件树

vue怎么实现文件树

Vue 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…