当前位置:首页 > VUE

vue登录逻辑的实现

2026-01-12 00:59:49VUE

Vue 登录逻辑实现

在 Vue 中实现登录逻辑通常涉及前端表单验证、API 请求、状态管理和路由控制。以下是常见的实现方式:

表单组件与数据绑定

使用 Vue 的 v-model 实现表单数据双向绑定:

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="form.username" type="text" placeholder="用户名">
    <input v-model="form.password" type="password" placeholder="密码">
    <button type="submit">登录</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      form: {
        username: '',
        password: ''
      }
    }
  }
}
</script>

表单验证

可以使用 Vuelidate 或手动验证:

methods: {
  validateForm() {
    if (!this.form.username.trim()) {
      alert('请输入用户名');
      return false;
    }
    if (this.form.password.length < 6) {
      alert('密码至少6位');
      return false;
    }
    return true;
  }
}

发送登录请求

通过 axios 发送 POST 请求:

vue登录逻辑的实现

import axios from 'axios';

methods: {
  async handleLogin() {
    if (!this.validateForm()) return;

    try {
      const response = await axios.post('/api/login', this.form);
      localStorage.setItem('token', response.data.token);
      this.$router.push('/dashboard');
    } catch (error) {
      alert(error.response?.data?.message || '登录失败');
    }
  }
}

状态管理(Vuex)

在 store 中管理登录状态:

// store/modules/auth.js
const state = {
  user: null,
  isAuthenticated: false
};

const mutations = {
  SET_USER(state, user) {
    state.user = user;
    state.isAuthenticated = !!user;
  }
};

const actions = {
  async login({ commit }, credentials) {
    const response = await axios.post('/api/login', credentials);
    commit('SET_USER', response.data.user);
    localStorage.setItem('token', response.data.token);
  }
};

路由守卫

保护需要认证的路由:

vue登录逻辑的实现

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

持久化登录状态

在应用初始化时检查 token:

// main.js
const token = localStorage.getItem('token');
if (token) {
  axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
  store.dispatch('fetchUser');
}

错误处理

统一处理 API 错误:

// 在 axios 拦截器中
axios.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      store.commit('LOGOUT');
      router.push('/login');
    }
    return Promise.reject(error);
  }
);

响应式导航

根据认证状态显示不同 UI:

<template>
  <div v-if="isAuthenticated">
    欢迎, {{ user.name }}!
    <button @click="logout">退出</button>
  </div>
  <div v-else>
    <router-link to="/login">登录</router-link>
  </div>
</template>

<script>
import { mapState } from 'vuex';

export default {
  computed: {
    ...mapState('auth', ['user', 'isAuthenticated'])
  },
  methods: {
    logout() {
      this.$store.dispatch('auth/logout');
    }
  }
}
</script>

标签: 逻辑vue
分享给朋友:

相关文章

vue实现单词反转

vue实现单词反转

实现思路 在Vue中实现单词反转功能,可以通过多种方式完成。核心思路是利用JavaScript的字符串处理方法,将输入的单词或句子拆分为数组,反转数组后再拼接成字符串。 方法一:使用计算属性 通过计…

vue实现选择本地文件

vue实现选择本地文件

实现文件选择功能 在Vue中实现本地文件选择可以通过HTML原生的<input type="file">元素实现。创建一个基本的文件选择组件: <template> &l…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框用…

vue 移动端实现签名

vue 移动端实现签名

Vue 移动端签名实现方法 在移动端实现签名功能,可以通过HTML5的Canvas结合触摸事件完成。以下是具体实现步骤: 使用Canvas绘制签名 安装vue-signature-pad插件或直…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm insta…

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心机制基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)。以下是具体实现方法: 基于 Vu…