当前位置:首页 > VUE

vue 实现token 登录

2026-01-08 06:44:13VUE

安装依赖

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

npm install axios vue-router

配置axios拦截器

src 目录下创建 utils/http.js 文件,配置请求和响应拦截器,自动携带 token 并处理 token 过期:

vue 实现token 登录

import axios from 'axios';

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

// 请求拦截器:添加token
http.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

// 响应拦截器:处理token过期
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 {
  data() {
    return {
      form: {
        username: '',
        password: '',
      },
    };
  },
  methods: {
    async handleLogin() {
      try {
        const res = await http.post('/login', this.form);
        localStorage.setItem('token', res.data.token);
        this.$router.push('/dashboard');
      } catch (error) {
        alert('登录失败');
      }
    },
  },
};

路由守卫配置

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

import Vue from 'vue';
import Router from 'vue-router';
import Login from '@/views/Login.vue';
import Dashboard from '@/views/Dashboard.vue';

Vue.use(Router);

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

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

export default router;

登出功能实现

在需要登出的地方清除 token 并跳转至登录页:

methods: {
  handleLogout() {
    localStorage.removeItem('token');
    this.$router.push('/login');
  },
}

注意事项

  • Token 存储:使用 localStorage 存储 token 需注意 XSS 风险,敏感项目可改用 httpOnly cookies。
  • HTTPS:确保生产环境使用 HTTPS 传输 token。
  • 刷新 Token:若后端支持 token 刷新,可在拦截器中实现自动刷新逻辑。

标签: vuetoken
分享给朋友:

相关文章

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> &l…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 do…

tabbar 实现 vue

tabbar 实现 vue

在 Vue 中实现 TabBar 功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue Router 结合自定义组件 创建一个自定义的 TabBar 组件,结合 Vue Router 实…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 TreeS…

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactiv…

vue拼图实现

vue拼图实现

实现 Vue 拼图游戏的方法 使用 Vue 组件和动态数据绑定 创建一个 Vue 组件来管理拼图的状态和逻辑。通过 v-for 动态渲染拼图块,利用 v-bind 绑定样式和位置。拼图块的数据可以存储…