当前位置:首页 > VUE

vue 实现简单登录

2026-01-17 09:29:31VUE

实现 Vue 简单登录功能

创建登录组件

在 Vue 项目中创建一个登录组件 Login.vue,包含用户名和密码输入框以及登录按钮。

<template>
  <div class="login-container">
    <h3>登录</h3>
    <form @submit.prevent="handleLogin">
      <div class="form-group">
        <label for="username">用户名</label>
        <input
          type="text"
          id="username"
          v-model="username"
          placeholder="请输入用户名"
        />
      </div>
      <div class="form-group">
        <label for="password">密码</label>
        <input
          type="password"
          id="password"
          v-model="password"
          placeholder="请输入密码"
        />
      </div>
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: "",
      password: "",
    };
  },
  methods: {
    handleLogin() {
      if (this.username && this.password) {
        // 登录逻辑
        alert("登录成功");
      } else {
        alert("请输入用户名和密码");
      }
    },
  },
};
</script>

<style scoped>
.login-container {
  max-width: 300px;
  margin: 0 auto;
  padding: 20px;
  border: 1px solid #ddd;
  border-radius: 5px;
}
.form-group {
  margin-bottom: 15px;
}
label {
  display: block;
  margin-bottom: 5px;
}
input {
  width: 100%;
  padding: 8px;
  box-sizing: border-box;
}
button {
  width: 100%;
  padding: 10px;
  background-color: #42b983;
  color: white;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}
</style>

添加路由配置

router/index.js 中配置登录页面的路由。

import Vue from "vue";
import VueRouter from "vue-router";
import Login from "../views/Login.vue";

Vue.use(VueRouter);

const routes = [
  {
    path: "/login",
    name: "Login",
    component: Login,
  },
];

const router = new VueRouter({
  routes,
});

export default router;

实现简单验证

在登录方法中添加简单的用户名和密码验证逻辑。

methods: {
  handleLogin() {
    if (!this.username || !this.password) {
      alert("请输入用户名和密码");
      return;
    }

    // 简单验证
    if (this.username === "admin" && this.password === "123456") {
      alert("登录成功");
      // 登录成功后跳转到首页
      this.$router.push("/");
    } else {
      alert("用户名或密码错误");
    }
  },
},

添加状态管理

使用 Vuex 管理登录状态,在 store/index.js 中创建状态管理。

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    isAuthenticated: false,
    user: null,
  },
  mutations: {
    login(state, user) {
      state.isAuthenticated = true;
      state.user = user;
    },
    logout(state) {
      state.isAuthenticated = false;
      state.user = null;
    },
  },
  actions: {
    login({ commit }, user) {
      commit("login", user);
    },
    logout({ commit }) {
      commit("logout");
    },
  },
});

完善登录逻辑

修改登录方法,使用 Vuex 管理登录状态。

methods: {
  handleLogin() {
    if (!this.username || !this.password) {
      alert("请输入用户名和密码");
      return;
    }

    if (this.username === "admin" && this.password === "123456") {
      this.$store.dispatch("login", { username: this.username });
      this.$router.push("/");
    } else {
      alert("用户名或密码错误");
    }
  },
},

添加导航守卫

在路由中添加导航守卫,保护需要登录才能访问的页面。

router.beforeEach((to, from, next) => {
  const isAuthenticated = store.state.isAuthenticated;

  if (to.name !== "Login" && !isAuthenticated) {
    next({ name: "Login" });
  } else {
    next();
  }
});

实现退出登录

在需要的地方添加退出登录功能。

methods: {
  logout() {
    this.$store.dispatch("logout");
    this.$router.push("/login");
  },
},

完整示例代码

Login.vue 完整示例:

vue 实现简单登录

<template>
  <div class="login-container">
    <h3>登录</h3>
    <form @submit.prevent="handleLogin">
      <div class="form-group">
        <label for="username">用户名</label>
        <input
          type="text"
          id="username"
          v-model="username"
          placeholder="请输入用户名"
        />
      </div>
      <div class="form-group">
        <label for="password">密码</label>
        <input
          type="password"
          id="password"
          v-model="password"
          placeholder="请输入密码"
        />
      </div>
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: "",
      password: "",
    };
  },
  methods: {
    handleLogin() {
      if (!this.username || !this.password) {
        alert("请输入用户名和密码");
        return;
      }

      if (this.username === "admin" && this.password === "123456") {
        this.$store.dispatch("login", { username: this.username });
        this.$router.push("/");
      } else {
        alert("用户名或密码错误");
      }
    },
  },
};
</script>

<style scoped>
.login-container {
  max-width: 300px;
  margin: 0 auto;
  padding: 20px;
  border: 1px solid #ddd;
  border-radius: 5px;
}
.form-group {
  margin-bottom: 15px;
}
label {
  display: block;
  margin-bottom: 5px;
}
input {
  width: 100%;
  padding: 8px;
  box-sizing: border-box;
}
button {
  width: 100%;
  padding: 10px;
  background-color: #42b983;
  color: white;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}
</style>

以上代码实现了一个简单的 Vue 登录功能,包括表单验证、状态管理和路由保护。可以根据实际需求进一步完善和扩展功能。

标签: 简单vue
分享给朋友:

相关文章

vue实现树

vue实现树

Vue 实现树形结构的方法 使用递归组件实现树形结构 递归组件是Vue中实现树形结构的常见方式。通过组件调用自身,可以轻松构建多层嵌套的树形数据。 <template> <ul…

vue实现全选下载

vue实现全选下载

Vue实现全选下载功能 全选下载功能通常涉及前端文件列表的多选操作和批量下载逻辑。以下是基于Vue的实现方案: 数据准备与渲染 在Vue组件中定义文件列表数据和选中状态: data() { r…

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备 准备需要筛选的数据源,通常是一个数组,可以存储在Vue组件的…

vue响应式实现

vue响应式实现

Vue 响应式实现原理 Vue 的响应式系统是其核心特性之一,通过数据劫持和依赖收集实现。以下是 Vue 2.x 和 Vue 3.x 响应式实现的主要机制: Vue 2.x 的响应式实现 V…

vue 实现多选

vue 实现多选

Vue 实现多选的方法 在 Vue 中实现多选功能可以通过多种方式完成,以下介绍几种常见的方法。 使用复选框(Checkbox)实现多选 通过 v-model 绑定数组来实现多选功能,适用于表单中的…

vue实现多级组件

vue实现多级组件

Vue 多级组件实现方法 在 Vue 中实现多级组件通常涉及父子组件通信、动态组件或递归组件等技术。以下是几种常见实现方式: 父子组件嵌套 通过逐层嵌套组件实现多级结构,适用于固定层级场景:…