当前位置:首页 > VUE

vue项目登录实现

2026-03-09 14:05:15VUE

Vue 项目登录功能实现

准备工作

确保已安装 Vue CLI 和必要的依赖,如 vue-routeraxios。创建项目后,设置路由和状态管理(如 Vuex 或 Pinia)。

登录页面设计

创建登录组件 Login.vue,包含表单元素(用户名、密码输入框和提交按钮)。使用 v-model 绑定表单数据。

<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>
export default {
  data() {
    return {
      form: {
        username: '',
        password: ''
      }
    }
  },
  methods: {
    handleLogin() {
      // 登录逻辑
    }
  }
}
</script>

后端接口调用

使用 axios 发送登录请求到后端 API。处理响应并存储 token。

vue项目登录实现

methods: {
  async handleLogin() {
    try {
      const response = await axios.post('/api/login', this.form);
      localStorage.setItem('token', response.data.token);
      this.$router.push('/dashboard');
    } catch (error) {
      console.error('登录失败:', error);
    }
  }
}

路由守卫

配置全局前置守卫,检查用户是否已认证。未登录用户访问受限路由时重定向到登录页。

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

状态管理

使用 Vuex 或 Pinia 管理用户状态。创建 auth 模块存储登录状态和用户信息。

vue项目登录实现

// store/auth.js
export default {
  state: {
    user: null,
    isAuthenticated: false
  },
  mutations: {
    setUser(state, user) {
      state.user = user;
      state.isAuthenticated = true;
    },
    logout(state) {
      state.user = null;
      state.isAuthenticated = false;
    }
  }
};

注销功能

清除本地存储的 token 并重置状态。

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

错误处理和反馈

添加加载状态和错误提示,提升用户体验。

data() {
  return {
    loading: false,
    error: null
  };
},
methods: {
  async handleLogin() {
    this.loading = true;
    this.error = null;
    try {
      // 登录逻辑
    } catch (error) {
      this.error = '用户名或密码错误';
    } finally {
      this.loading = false;
    }
  }
}

安全性考虑

确保使用 HTTPS 传输数据,后端验证输入并实现 CSRF 保护。前端敏感信息避免硬编码。

标签: 项目vue
分享给朋友:

相关文章

vue实现下拉菜单

vue实现下拉菜单

实现下拉菜单的基本思路 使用Vue实现下拉菜单可以通过动态绑定v-show或v-if控制菜单显示隐藏,结合事件监听(如@click或@mouseenter)触发状态切换。以下是两种常见实现方式: 方…

vue实现选择季度

vue实现选择季度

Vue 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <…

vue实现菜单调用

vue实现菜单调用

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

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…