当前位置:首页 > VUE

vue 使用axios实现登录

2026-01-21 05:29:23VUE

安装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', // 替换为实际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(response => {
        // 登录成功处理
        localStorage.setItem('token', response.data.token)
        this.$router.push('/dashboard')
      }).catch(error => {
        console.error('登录失败:', error)
      })
    }
  }
}
</script>

路由配置

确保配置了登录后的跳转路由(通常在router/index.js中):

vue 使用axios实现登录

const routes = [
  {
    path: '/login',
    component: () => import('@/views/Login.vue')
  },
  {
    path: '/dashboard',
    component: () => import('@/views/Dashboard.vue'),
    meta: { requiresAuth: true }
  }
]

全局路由守卫

添加路由守卫实现登录状态验证:

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

错误处理增强

建议在拦截器中添加更完善的错误处理逻辑:

service.interceptors.response.use(
  response => {
    if (response.data.code !== 200) {
      return Promise.reject(new Error(response.data.message || 'Error'))
    }
    return response.data
  },
  error => {
    if (error.response.status === 401) {
      // 处理token过期等情况
      localStorage.removeItem('token')
      router.push('/login')
    }
    return Promise.reject(error)
  }
)

标签: vueaxios
分享给朋友:

相关文章

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const route…

vue实现sso

vue实现sso

Vue 实现 SSO(单点登录)方案 单点登录(SSO)允许用户通过一次登录访问多个相关系统。以下是基于 Vue 的实现方案: 使用 OAuth2/OpenID Connect 协议 OAuth2…

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> &l…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue实现注册

vue实现注册

Vue 实现注册功能 注册功能通常涉及前端表单、数据验证、与后端 API 的交互等步骤。以下是一个完整的 Vue 实现注册功能的方案。 创建注册表单 使用 Vue 的模板语法创建注册表单,包含用户名…