当前位置:首页 > VUE

vue axios实现登录

2026-02-19 05:11:38VUE

安装 axios 依赖

在项目根目录下运行以下命令安装 axios:

npm install axios

创建 axios 实例

src 目录下新建 utils/request.js 文件,配置基础请求实例:

import axios from 'axios';

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

// 请求拦截器(添加token等)
service.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('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) {
      // 处理未授权逻辑(如跳转登录页)
    }
    return Promise.reject(error);
  }
);

export default service;

编写登录 API

src/api 目录下创建 auth.js,定义登录接口:

import request from '@/utils/request';

export function login(data) {
  return request({
    url: '/login',
    method: 'post',
    data,
  });
}

实现登录页面逻辑

在登录组件中调用接口并处理结果:

import { login } from '@/api/auth';

export default {
  data() {
    return {
      form: {
        username: '',
        password: '',
      },
    };
  },
  methods: {
    handleLogin() {
      login(this.form)
        .then((res) => {
          localStorage.setItem('token', res.token);
          this.$router.push('/dashboard'); // 跳转到首页
        })
        .catch((error) => {
          console.error('登录失败:', error);
        });
    },
  },
};

模板部分示例

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="form.username" placeholder="用户名" />
    <input v-model="form.password" type="password" placeholder="密码" />
    <button type="submit">登录</button>
  </form>
</template>

关键注意事项

  • 确保后端接口支持跨域(或配置代理)
  • 生产环境需使用 HTTPS 并启用 CSRF 防护
  • 敏感数据(如 token)建议结合 Vuex 或 Pinia 管理

错误处理扩展

可根据业务需求在响应拦截器中补充逻辑:

vue axios实现登录

service.interceptors.response.use(
  (response) => {
    if (response.data.code !== 200) {
      return Promise.reject(new Error(response.data.message));
    }
    return response.data;
  }
);

标签: vueaxios
分享给朋友:

相关文章

vue实现屏幕共享

vue实现屏幕共享

Vue 实现屏幕共享的方法 使用 WebRTC 和 getDisplayMedia API 通过 navigator.mediaDevices.getDisplayMedia 捕获屏幕内容,结合 We…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

实现vue模版

实现vue模版

Vue 模板的基本结构 Vue 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="…

vue实现上传

vue实现上传

Vue 文件上传实现方法 使用 Vue 实现文件上传可以通过原生 HTML5 的 <input type="file"> 元素结合 Vue 的事件处理和数据绑定来实现。 基础实现步骤…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…

vue实现swiper

vue实现swiper

Vue 中实现 Swiper 的方法 安装 Swiper 依赖 在 Vue 项目中安装 Swiper 和相关依赖: npm install swiper vue-awesome-swiper 全局引…