当前位置:首页 > VUE

vue axios实现登录

2026-01-18 12:44:28VUE

安装 axios 依赖

在 Vue 项目中安装 axios 依赖包,可以通过 npm 或 yarn 进行安装。

npm install axios
# 或
yarn add axios

创建 axios 实例

src 目录下新建 utils/http.js 文件,配置 axios 实例,设置基础 URL 和拦截器。

vue axios实现登录

import axios from 'axios';

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

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

// 响应拦截器
http.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    if (error.response.status === 401) {
      // 处理未授权错误,例如跳转到登录页
    }
    return Promise.reject(error);
  }
);

export default http;

创建登录 API 方法

src/api/auth.js 中定义登录接口方法。

import http from '../utils/http';

export const login = (data) => {
  return http.post('/login', data);
};

在 Vue 组件中调用登录

在登录组件中引入 API 方法,并处理用户输入和登录逻辑。

vue axios实现登录

<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>

<script>
import { login } from '@/api/auth';

export default {
  data() {
    return {
      form: {
        username: '',
        password: '',
      },
    };
  },
  methods: {
    async handleLogin() {
      try {
        const res = await login(this.form);
        localStorage.setItem('token', res.token);
        this.$router.push('/dashboard'); // 登录成功后跳转
      } catch (error) {
        alert('登录失败,请检查用户名和密码');
      }
    },
  },
};
</script>

处理 Token 存储和路由守卫

src/router/index.js 中配置路由守卫,检查用户是否已登录。

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

Vue.use(Router);

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

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

export default router;

全局注入 axios

main.js 中将 axios 实例挂载到 Vue 原型上,方便全局调用。

import Vue from 'vue';
import App from './App.vue';
import http from './utils/http';
import router from './router';

Vue.prototype.$http = http;

new Vue({
  router,
  render: (h) => h(App),
}).$mount('#app');

标签: vueaxios
分享给朋友:

相关文章

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为 @…

vue轮播实现

vue轮播实现

Vue 轮播实现方法 使用第三方库(推荐) 安装 swiper 或 vue-awesome-swiper 库,快速实现功能丰富的轮播效果。 以 vue-awesome-swiper 为例: npm…

vue实现分步

vue实现分步

Vue 实现分步功能 在 Vue 中实现分步功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 通过动态组件切换不同的步骤内容,结合 v-if 或 component 标签实现分步逻辑。…

vue实现listview

vue实现listview

Vue 实现 ListView 的方法 基础列表渲染 使用 v-for 指令可以轻松实现基础列表渲染。在 Vue 中,v-for 用于遍历数组或对象,生成动态列表。 <template>…