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

实现简单验证

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

vue 实现简单登录

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 管理登录状态。

vue 实现简单登录

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 完整示例:

<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.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:…

vue中登陆实现逻辑

vue中登陆实现逻辑

Vue 中登录实现逻辑 前端实现逻辑 表单验证 使用 Vue 的表单验证库(如 VeeValidate)或自定义验证规则,确保用户输入的账号和密码符合要求。例如,检查邮箱格式、密码长度等。 发送登…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v-m…

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue实现看板

vue实现看板

Vue 实现看板功能 使用 Vue 实现看板功能可以通过组件化开发、状态管理和拖拽库结合完成。以下是一个完整的实现方案: 基础项目结构 src/ ├── components/ │ ├── Ka…