当前位置:首页 > VUE

vue axios 实现登录登出

2026-02-24 03:55:02VUE

安装依赖

确保项目中已安装 axiosvue-router(用于路由跳转)。通过以下命令安装:

npm install axios vue-router

创建 Axios 实例

src 目录下创建 utils/axios.js 文件,配置全局 Axios 实例:

import axios from 'axios';

const instance = axios.create({
  baseURL: 'http://your-api-domain.com/api', // 替换为实际 API 地址
  timeout: 5000,
});

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

// 响应拦截器:处理 token 过期
instance.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    if (error.response.status === 401) {
      localStorage.removeItem('token');
      window.location.href = '/login'; // 跳转到登录页
    }
    return Promise.reject(error);
  }
);

export default instance;

登录功能实现

在登录组件中调用登录接口并存储 token:

import axios from '../utils/axios';

export default {
  methods: {
    async handleLogin() {
      try {
        const response = await axios.post('/login', {
          username: this.username,
          password: this.password,
        });
        localStorage.setItem('token', response.data.token);
        this.$router.push('/dashboard'); // 跳转到主页
      } catch (error) {
        console.error('登录失败:', error);
      }
    },
  },
};

登出功能实现

在登出逻辑中清除 token 并跳转:

import axios from '../utils/axios';

export default {
  methods: {
    async handleLogout() {
      try {
        await axios.post('/logout');
        localStorage.removeItem('token');
        this.$router.push('/login'); // 跳转到登录页
      } catch (error) {
        console.error('登出失败:', error);
      }
    },
  },
};

路由守卫配置

src/router/index.js 中配置路由守卫,实现未登录跳转:

import Vue from 'vue';
import Router from 'vue-router';

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) => {
  const token = localStorage.getItem('token');
  if (to.matched.some(record => record.meta.requiresAuth) && !token) {
    next('/login');
  } else {
    next();
  }
});

export default router;

全局状态管理(可选)

如需集中管理登录状态,可使用 Vuex:

vue axios 实现登录登出

// store/index.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    token: localStorage.getItem('token') || null,
  },
  mutations: {
    setToken(state, token) {
      state.token = token;
      localStorage.setItem('token', token);
    },
    clearToken(state) {
      state.token = null;
      localStorage.removeItem('token');
    },
  },
});

注意事项

  1. HTTPS 安全:生产环境务必使用 HTTPS 传输敏感数据。
  2. Token 存储:避免将 token 存储在 sessionStorage 中,防止页面刷新后丢失。
  3. 跨域问题:确保后端已配置 CORS 或通过代理解决跨域。

标签: vueaxios
分享给朋友:

相关文章

vue实现switch

vue实现switch

Vue 实现 Switch 开关组件 在 Vue 中实现 Switch 开关组件可以通过自定义组件或使用现有 UI 库完成。以下是几种常见实现方式: 自定义 Switch 组件 创建一个基础 Sw…

vue实现pie

vue实现pie

Vue 实现饼图 在 Vue 中实现饼图通常可以通过第三方图表库(如 ECharts、Chart.js 或 Highcharts)来完成。以下是使用 ECharts 和 Chart.js 的两种常见方…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue实现addclass

vue实现addclass

Vue 实现动态添加 class 的方法 在 Vue 中动态添加 class 可以通过多种方式实现,以下是常见的几种方法: 使用对象语法 通过绑定一个对象到 :class,可以动态切换 class…

vue 简单实现

vue 简单实现

以下是 Vue 的简单实现示例,涵盖基础模板、数据绑定、方法及生命周期: 基础模板与数据绑定 <div id="app"> <p>{{ message }}</…

vue 实现excel

vue 实现excel

Vue 实现 Excel 功能 前端导出 Excel 使用 xlsx 库可以轻松实现前端 Excel 导出功能。安装依赖: npm install xlsx 导出 Excel 示例代码: impo…