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

vue axios实现登录源码

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中添加路由守卫:

vue axios实现登录源码

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

baseURL: process.env.VUE_APP_BASE_API

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

相关文章

vue实现triger

vue实现triger

在Vue中实现触发器(trigger)功能通常涉及自定义事件或DOM事件触发。以下是几种常见场景的实现方法: 自定义事件触发 通过$emit方法触发父组件中监听的自定义事件: // 子组件 thi…

vue实现公式

vue实现公式

在Vue中实现公式展示或计算可以通过多种方式实现,以下为具体方法: 使用模板插值与计算属性 若公式较简单,可直接在模板中使用插值表达式或计算属性。例如计算圆的面积: <templat…

vue实现picker

vue实现picker

Vue 实现 Picker 组件的方法 在 Vue 中实现 Picker 组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 实现 通过 Vue 的模板和样式绑定…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展…

vue实现微云

vue实现微云

Vue 实现微云功能 使用 Vue 实现类似微云的网盘功能需要结合前端框架、后端存储及文件处理技术。以下是关键实现步骤和代码示例: 前端框架搭建 使用 Vue CLI 创建项目基础结构,安装必要依…

实现简单vue

实现简单vue

实现一个简单的 Vue.js 框架 Vue.js 的核心功能包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化版的 Vue 实现,涵盖基本功能。 数据响应式系统 使用 Object.define…