当前位置:首页 > VUE

vue axios 实现登录

2026-01-17 20:28:11VUE

Vue 中使用 Axios 实现登录功能

安装 Axios

在项目中安装 Axios 依赖:

npm install axios

创建 Axios 实例

src 目录下创建 api 文件夹,并新建 axios.js 文件:

import axios from 'axios'

const instance = axios.create({
  baseURL: 'http://your-api-base-url.com',
  timeout: 5000
})

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

// 响应拦截器
instance.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    return Promise.reject(error)
  }
)

export default instance

创建登录 API

api 文件夹下创建 auth.js

vue axios 实现登录

import request from './axios'

export const login = (data) => {
  return request({
    url: '/login',
    method: 'post',
    data
  })
}

创建登录页面组件

创建 Login.vue 组件:

<template>
  <div>
    <form @submit.prevent="handleSubmit">
      <input v-model="form.username" type="text" placeholder="Username">
      <input v-model="form.password" type="password" placeholder="Password">
      <button type="submit">Login</button>
    </form>
  </div>
</template>

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

export default {
  data() {
    return {
      form: {
        username: '',
        password: ''
      }
    }
  },
  methods: {
    async handleSubmit() {
      try {
        const res = await login(this.form)
        localStorage.setItem('token', res.token)
        this.$router.push('/dashboard')
      } catch (error) {
        console.error('Login failed:', error)
      }
    }
  }
}
</script>

路由配置

router/index.js 中配置登录路由:

vue axios 实现登录

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

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/login',
      name: 'Login',
      component: Login
    }
  ]
})

状态管理(可选)

如需使用 Vuex 管理登录状态,可创建 store 模块:

// store/modules/auth.js
export default {
  state: {
    token: localStorage.getItem('token') || ''
  },
  mutations: {
    SET_TOKEN(state, token) {
      state.token = token
      localStorage.setItem('token', token)
    }
  },
  actions: {
    login({ commit }, credentials) {
      return login(credentials).then(res => {
        commit('SET_TOKEN', res.token)
        return res
      })
    }
  }
}

请求封装优化

可添加全局错误处理和 loading 状态:

// 在 axios.js 中添加
instance.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    if (error.response.status === 401) {
      // 处理未授权
      router.push('/login')
    }
    return Promise.reject(error)
  }
)

以上实现涵盖了 Vue 中使用 Axios 进行登录功能的主要环节,包括请求封装、API 管理、组件实现和状态存储。根据实际项目需求,可进一步扩展错误处理、表单验证等功能。

标签: vueaxios
分享给朋友:

相关文章

vue实现hover

vue实现hover

Vue 实现 hover 效果的方法 在 Vue 中实现 hover 效果可以通过多种方式实现,包括使用 CSS、Vue 指令或事件监听。以下是几种常见的方法: 使用 CSS :hover 伪类 通…

vue实现快手

vue实现快手

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

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…

vue 实现音乐

vue 实现音乐

Vue 实现音乐播放功能 在 Vue 中实现音乐播放功能,可以通过 HTML5 的 <audio> 元素或第三方库如 howler.js 来实现。以下是两种方法的详细步骤: 使用 HTM…

vue实现eventbus

vue实现eventbus

Vue 中实现 EventBus 在 Vue 中,EventBus 是一种跨组件通信的机制,尤其适用于非父子组件之间的数据传递。以下是实现 EventBus 的几种方法: 方法一:使用 Vue 实例…

vue实现watch

vue实现watch

监听数据变化 在Vue中,watch用于监听响应式数据的变化并执行回调函数。基本语法如下: watch: { propertyName(newValue, oldValue) { //…