当前位置:首页 > 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:

// 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 或通过代理解决跨域。

vue axios 实现登录登出

标签: vueaxios
分享给朋友:

相关文章

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <…

vue实现缩放

vue实现缩放

Vue 实现缩放的方法 在 Vue 中实现缩放功能可以通过多种方式完成,以下是一些常见的方法: 使用 CSS transform 属性 通过 CSS 的 transform: scale() 属性可…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现签章

vue实现签章

Vue 实现签章功能 签章功能通常包括手写签名、电子印章等。以下是基于 Vue 的实现方法: 使用 canvas 实现手写签名 安装依赖(如需要): npm install signature…