当前位置:首页 > VUE

vue实现登录系统axios

2026-02-24 16:25:11VUE

Vue 中使用 Axios 实现登录系统

安装 Axios

在项目中安装 Axios 依赖:

npm install axios

创建 Axios 实例

src 目录下新建 utils/http.js 文件,配置 Axios 基础设置和拦截器:

import axios from 'axios'

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

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

// 响应拦截器
http.interceptors.response.use(
  response => response.data,
  error => {
    if (error.response.status === 401) {
      // 处理未授权情况
    }
    return Promise.reject(error)
  }
)

export default http

登录组件实现

创建登录表单组件 Login.vue

<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 http from '@/utils/http'

export default {
  data() {
    return {
      form: {
        username: '',
        password: ''
      }
    }
  },
  methods: {
    async handleLogin() {
      try {
        const res = await http.post('/login', this.form)
        localStorage.setItem('token', res.token)
        this.$router.push('/dashboard')
      } catch (error) {
        alert('登录失败')
      }
    }
  }
}
</script>

路由配置

router/index.js 中配置路由守卫:

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

Vue.use(Router)

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

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

export default router

登出功能实现

在需要登出的组件中添加方法:

methods: {
  logout() {
    localStorage.removeItem('token')
    this.$router.push('/login')
  }
}

错误处理优化

http.js 中完善错误处理逻辑:

http.interceptors.response.use(
  response => response.data,
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          router.push('/login')
          break
        case 403:
          alert('无权限访问')
          break
        case 500:
          alert('服务器错误')
          break
        default:
          alert('未知错误')
      }
    }
    return Promise.reject(error)
  }
)

环境变量配置

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

VUE_APP_API_URL=https://your-api-url.com

修改 http.js 中的 baseURL

baseURL: process.env.VUE_APP_API_URL

以上实现包含了 Vue 项目中通过 Axios 实现登录系统的主要环节,可根据实际需求进行调整和扩展。

vue实现登录系统axios

标签: 系统vue
分享给朋友:

相关文章

vue实现添加用户

vue实现添加用户

Vue 实现添加用户功能 数据绑定与表单设计 在 Vue 中实现添加用户功能,首先需要设计一个表单,用于收集用户输入的数据。通过 v-model 实现双向数据绑定,确保表单数据与 Vue 实例中的数据…

vue懒加载实现难吗

vue懒加载实现难吗

vue懒加载的实现难度 Vue懒加载的实现并不复杂,核心逻辑是通过动态导入(Dynamic Imports)和路由配置或组件异步加载完成。以下是具体实现方法: 路由懒加载实现 在Vue Rout…

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> <…

vue实现同步

vue实现同步

Vue 实现同步的方法 在 Vue 中实现同步操作通常涉及数据绑定、状态管理和异步操作的处理。以下是几种常见的方法: 使用计算属性(Computed Properties) 计算属性基于响应式依赖…

vue实现全景

vue实现全景

Vue 实现全景效果的方法 使用 Vue 实现全景效果通常需要结合第三方库或框架,以下是几种常见的方法: 使用 Three.js 和 Vue-Three.js Three.js 是一个强大的 3D…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div…