当前位置:首页 > 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 请求:

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);
  }
};

路由守卫

保护需要认证的路由:

// 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:

vue登录逻辑的实现

<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 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue实现节流

vue实现节流

vue实现节流的方法 在Vue中实现节流(throttle)功能,通常用于限制高频事件的触发频率,例如滚动、输入或按钮点击。以下是几种常见的实现方式: 使用Lodash的throttle函数 安装L…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue nexttick 实现

vue nexttick 实现

Vue nextTick 实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它主要用于确保在 DOM 更新完成后执行某些操作。 核心实现机制 ne…