当前位置:首页 > 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 中配置登录页面的路由。

vue实现login

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 集中管理用户登录状态。

vue实现login

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

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

显示验证错误

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

<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 实现单点登录(SSO)方案 单点登录(SSO)允许用户在多个相关但独立的系统中使用同一组凭证登录。以下是基于 Vue 的实现方案: 基于 OAuth2/OpenID Connect 的实现…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue 实现后退

vue 实现后退

实现后退功能的方法 在Vue中实现后退功能通常需要结合浏览器历史记录API或Vue Router的导航方法。以下是几种常见的实现方式: 使用Vue Router的go方法 this.$router…

vue实现录音

vue实现录音

Vue 实现录音功能 在 Vue 中实现录音功能可以通过浏览器提供的 MediaRecorder API 完成。以下是具体实现方法: 引入依赖 确保项目支持现代浏览器 API,无需额外安装库。若需兼…

黑马vue实现

黑马vue实现

以下是关于使用 Vue.js 实现黑马相关功能或项目的关键方法和实践指南: 环境配置与项目初始化 安装最新版 Vue CLI 或使用 Vite 创建项目: npm create vue@lates…