当前位置:首页 > VUE

vue axios实现登录源码

2026-02-22 03:48:43VUE

安装axios依赖

在Vue项目中安装axios,可以通过npm或yarn进行安装:

npm install axios
# 或
yarn add axios

创建axios实例

src目录下新建utils/request.js文件,配置axios实例:

import axios from 'axios'

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

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 在发送请求前可处理逻辑(如添加token)
    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 => {
    return Promise.reject(error)
  }
)

export default service

登录API封装

src/api目录下创建auth.js

import request from '@/utils/request'

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

登录页面实现

在登录组件中调用登录接口:

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

<script>
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)
      })
    }
  }
}
</script>

路由守卫配置

src/router/index.js中添加路由守卫:

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

错误处理优化

utils/request.js中完善错误处理:

service.interceptors.response.use(
  response => {
    const res = response.data
    if (res.code !== 200) {
      return Promise.reject(new Error(res.message || 'Error'))
    }
    return res
  },
  error => {
    if (error.response.status === 401) {
      // 处理未授权情况
      localStorage.removeItem('token')
      window.location.reload()
    }
    return Promise.reject(error)
  }
)

环境变量配置

在项目根目录创建.env.development.env.production文件:

# .env.development
VUE_APP_BASE_API=/api
# .env.production
VUE_APP_BASE_API=https://production-api.com

修改request.js中的baseURL

vue axios实现登录源码

baseURL: process.env.VUE_APP_BASE_API

标签: 源码vue
分享给朋友:

相关文章

vue实现引导

vue实现引导

Vue 实现引导功能的方法 使用第三方库 推荐使用 driver.js 或 intro.js 这类专门为 Vue 设计的引导库。这些库提供了完整的 API 和样式,能够快速实现引导功能。 安装 dr…

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } },…

vue 实现弹窗

vue 实现弹窗

Vue 实现弹窗的方法 在 Vue 中实现弹窗功能可以通过多种方式完成,以下是几种常见的方法: 使用组件和 v-if/v-show 控制显示 创建一个独立的弹窗组件,通过 v-if 或 v-show…

vue实现换页

vue实现换页

Vue实现页面切换的方法 在Vue中实现页面切换通常可以通过Vue Router来完成。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的实现方式:…