当前位置:首页 > VUE

vue axios 实现登录

2026-03-10 02:11:28VUE

安装 Axios

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

npm install axios
# 或
yarn add axios

配置 Axios

在项目中创建一个单独的文件(如 src/api/axios.js)配置 Axios 实例,设置基础 URL 和拦截器。

import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://your-api-domain.com/api',
  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 => {
    if (error.response.status === 401) {
      // 处理未授权情况
      localStorage.removeItem('token');
      window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

export default instance;

创建登录方法

在 Vue 组件或单独的服务文件中调用登录接口。

vue axios 实现登录

import axios from './api/axios';

const login = async (credentials) => {
  try {
    const response = await axios.post('/login', credentials);
    localStorage.setItem('token', response.data.token);
    return response;
  } catch (error) {
    throw error;
  }
};

export { login };

在 Vue 组件中使用

在登录页面组件中调用登录方法,处理用户输入和登录逻辑。

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="email" type="email" placeholder="Email" required />
    <input v-model="password" type="password" placeholder="Password" required />
    <button type="submit">Login</button>
  </form>
</template>

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

export default {
  data() {
    return {
      email: '',
      password: '',
    };
  },
  methods: {
    async handleLogin() {
      try {
        const response = await login({
          email: this.email,
          password: this.password,
        });
        this.$router.push('/dashboard');
      } catch (error) {
        alert('Login failed: ' + error.message);
      }
    },
  },
};
</script>

处理 Token 存储

登录成功后,将 token 存储到本地存储(localStorage)或 Vuex 中,并在后续请求中自动附加 token。

vue axios 实现登录

路由守卫

配置路由守卫,确保未登录用户无法访问受保护的路由。

import router from './router';
import { isAuthenticated } from './utils/auth';

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isAuthenticated()) {
    next('/login');
  } else {
    next();
  }
});

注销功能

实现注销功能,清除本地存储的 token 并重定向到登录页面。

const logout = () => {
  localStorage.removeItem('token');
  window.location.href = '/login';
};

标签: vueaxios
分享给朋友:

相关文章

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…

vue优秀实现

vue优秀实现

Vue.js 优秀实现方法 响应式数据管理 使用 Vue 的 ref 和 reactive 处理基础类型和对象类型数据,结合 computed 计算属性优化渲染性能。对于复杂状态,推荐 Pinia 替…

简单实现vue

简单实现vue

Vue 的基本实现 创建一个简单的 Vue 应用需要引入 Vue 库,并编写基本的模板和数据绑定逻辑。 <!DOCTYPE html> <html lang="en"> &l…

vue实现换肤

vue实现换肤

使用 CSS 变量实现换肤 在 Vue 项目中,可以通过 CSS 变量(Custom Properties)动态切换主题色。CSS 变量可以在运行时修改,适合实现换肤功能。 定义全局 CSS 变量:…

vue实现烟花

vue实现烟花

Vue 实现烟花效果 在 Vue 中实现烟花效果可以通过结合 CSS 动画和 JavaScript 动态生成烟花元素。以下是具体实现方法: 动态生成烟花元素 通过 Vue 的 v-for 动态生成烟…

vue rooter 实现原理

vue rooter 实现原理

Vue Router 实现原理 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。其核心实现原理包括路由匹配、组件渲染和导航守卫等机制。 路由匹配与动态路由 V…