当前位置:首页 > VUE

vue实现login

2026-02-10 10:49:29VUE

Vue 实现登录功能

创建登录表单组件

在 Vue 项目中创建一个登录表单组件,通常命名为 Login.vue。该组件包含用户名和密码输入框,以及提交按钮。

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

<script>
export default {
  data() {
    return {
      username: "",
      password: "",
    };
  },
  methods: {
    handleLogin() {
      // 登录逻辑
    },
  },
};
</script>

<style scoped>
.login-form {
  max-width: 300px;
  margin: 0 auto;
  padding: 20px;
}
.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;
  cursor: pointer;
}
</style>

实现登录逻辑

handleLogin 方法中,添加登录逻辑。通常需要调用后端 API 验证用户凭据。

methods: {
  async handleLogin() {
    try {
      const response = await axios.post("/api/login", {
        username: this.username,
        password: this.password,
      });

      // 存储用户 token 或其他认证信息
      localStorage.setItem("userToken", response.data.token);

      // 跳转到主页或其他受保护的路由
      this.$router.push("/dashboard");
    } catch (error) {
      console.error("登录失败:", error);
      alert("登录失败,请检查用户名和密码");
    }
  },
},

添加路由配置

在 Vue Router 中配置登录页面的路由。

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

Vue.use(Router);

export default new Router({
  routes: [
    {
      path: "/login",
      name: "login",
      component: Login,
    },
    // 其他路由...
  ],
});

实现路由守卫

为了保护需要认证的路由,可以添加全局路由守卫,检查用户是否已登录。

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem("userToken");

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

使用 Vuex 管理登录状态

对于更复杂的应用,可以使用 Vuex 集中管理用户登录状态。

// store.js
import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    user: null,
    isAuthenticated: false,
  },
  mutations: {
    setUser(state, user) {
      state.user = user;
      state.isAuthenticated = true;
    },
    logout(state) {
      state.user = null;
      state.isAuthenticated = false;
    },
  },
  actions: {
    login({ commit }, userData) {
      return axios.post("/api/login", userData).then((response) => {
        commit("setUser", response.data.user);
        localStorage.setItem("userToken", response.data.token);
      });
    },
    logout({ commit }) {
      localStorage.removeItem("userToken");
      commit("logout");
    },
  },
});

登录组件集成 Vuex

在登录组件中,使用 Vuex action 处理登录。

import { mapActions } from "vuex";

methods: {
  ...mapActions(["login"]),
  async handleLogin() {
    try {
      await this.login({
        username: this.username,
        password: this.password,
      });
      this.$router.push("/dashboard");
    } catch (error) {
      console.error("登录失败:", error);
      alert("登录失败,请检查用户名和密码");
    }
  },
},

表单验证

添加基本的表单验证,确保用户输入符合要求。

data() {
  return {
    username: "",
    password: "",
    errors: {},
  };
},
methods: {
  validateForm() {
    this.errors = {};

    if (!this.username) {
      this.errors.username = "用户名不能为空";
    }

    if (!this.password) {
      this.errors.password = "密码不能为空";
    } else if (this.password.length < 6) {
      this.errors.password = "密码长度不能少于6位";
    }

    return Object.keys(this.errors).length === 0;
  },
  async handleLogin() {
    if (!this.validateForm()) return;

    // 其余登录逻辑...
  },
},

显示验证错误

在模板中显示验证错误信息。

vue实现login

<div class="form-group">
  <label for="username">用户名</label>
  <input
    type="text"
    id="username"
    v-model="username"
    placeholder="请输入用户名"
  />
  <span class="error" v-if="errors.username">{{ errors.username }}</span>
</div>

<div class="form-group">
  <label for="password">密码</label>
  <input
    type="password"
    id="password"
    v-model="password"
    placeholder="请输入密码"
  />
  <span class="error" v-if="errors.password">{{ errors.password }}</span>
</div>

<style scoped>
.error {
  color: red;
  font-size: 12px;
}
</style>

标签: vuelogin
分享给朋友:

相关文章

vue优秀实现

vue优秀实现

Vue.js 优秀实现方法 响应式数据管理 使用 Vue 的 ref 和 reactive 处理基础类型和对象类型数据,结合 computed 计算属性优化渲染性能。对于复杂状态,推荐 Pinia 替…

vue原理实现

vue原理实现

Vue 原理实现的核心机制 Vue.js 的核心原理基于响应式系统、虚拟 DOM 和模板编译。以下是其核心实现机制的分解: 响应式系统 Vue 使用 Object.defineProperty(Vu…

vue实现定时

vue实现定时

Vue 实现定时功能的方法 使用 setInterval 和 clearInterval 在 Vue 中可以通过 setInterval 和 clearInterval 实现定时功能。在组件的 mou…

vue nexttrick实现

vue nexttrick实现

Vue 中 nextTick 的实现原理 nextTick 是 Vue 提供的一个异步方法,用于在下次 DOM 更新循环结束之后执行延迟回调。它利用了 JavaScript 的事件循环机制,确保回调在…

vue实现tabs

vue实现tabs

Vue实现Tabs组件的方法 使用动态组件和v-for指令 在Vue中创建Tabs组件可以通过动态组件和v-for指令实现。定义一个包含tab标题和内容的数组,使用v-for渲染tab标题,并通过点击…

vue 实现table

vue 实现table

Vue 实现 Table 的方法 使用原生 HTML 表格 通过 Vue 的 v-for 指令动态渲染表格数据,适合简单表格场景。 <template> <table>…