当前位置:首页 > VUE

vue项目实现注册登录

2026-01-21 22:39:48VUE

Vue 项目实现注册登录功能

注册登录功能是 Web 应用的基础功能,Vue 项目可以通过以下步骤实现。

项目结构

确保项目结构清晰,通常包含以下关键文件:

  • src/views/Login.vue:登录页面
  • src/views/Register.vue:注册页面
  • src/store/auth.js:状态管理(如使用 Vuex)
  • src/router/index.js:路由配置
  • src/api/auth.js:API 请求封装

前端页面实现

登录页面 (Login.vue)

<template>
  <div>
    <h2>登录</h2>
    <form @submit.prevent="handleLogin">
      <input v-model="email" type="email" placeholder="邮箱" required />
      <input v-model="password" type="password" placeholder="密码" required />
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      email: "",
      password: "",
    };
  },
  methods: {
    async handleLogin() {
      try {
        const response = await this.$axios.post("/auth/login", {
          email: this.email,
          password: this.password,
        });
        localStorage.setItem("token", response.data.token);
        this.$router.push("/dashboard");
      } catch (error) {
        console.error("登录失败", error);
      }
    },
  },
};
</script>

注册页面 (Register.vue)

vue项目实现注册登录

<template>
  <div>
    <h2>注册</h2>
    <form @submit.prevent="handleRegister">
      <input v-model="name" type="text" placeholder="用户名" required />
      <input v-model="email" type="email" placeholder="邮箱" required />
      <input v-model="password" type="password" placeholder="密码" required />
      <button type="submit">注册</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      name: "",
      email: "",
      password: "",
    };
  },
  methods: {
    async handleRegister() {
      try {
        await this.$axios.post("/auth/register", {
          name: this.name,
          email: this.email,
          password: this.password,
        });
        this.$router.push("/login");
      } catch (error) {
        console.error("注册失败", error);
      }
    },
  },
};
</script>

路由配置

src/router/index.js 中配置路由:

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

Vue.use(Router);

export default new Router({
  routes: [
    { path: "/login", component: Login },
    { path: "/register", component: Register },
  ],
});

状态管理(Vuex)

src/store/auth.js 中管理用户状态:

export default {
  state: {
    user: null,
    token: localStorage.getItem("token") || null,
  },
  mutations: {
    setUser(state, user) {
      state.user = user;
    },
    setToken(state, token) {
      state.token = token;
      localStorage.setItem("token", token);
    },
    logout(state) {
      state.user = null;
      state.token = null;
      localStorage.removeItem("token");
    },
  },
  actions: {
    async login({ commit }, credentials) {
      const response = await axios.post("/auth/login", credentials);
      commit("setToken", response.data.token);
      commit("setUser", response.data.user);
    },
    async register({ commit }, userData) {
      await axios.post("/auth/register", userData);
    },
    logout({ commit }) {
      commit("logout");
    },
  },
};

API 请求封装

src/api/auth.js 中封装 API 请求:

vue项目实现注册登录

import axios from "axios";

export default {
  login(credentials) {
    return axios.post("/auth/login", credentials);
  },
  register(userData) {
    return axios.post("/auth/register", userData);
  },
};

后端接口(示例)

假设后端使用 Node.js + Express,提供以下接口:

const express = require("express");
const jwt = require("jsonwebtoken");
const app = express();

app.post("/auth/login", (req, res) => {
  const { email, password } = req.body;
  // 验证用户逻辑
  const token = jwt.sign({ userId: 1 }, "secret_key");
  res.json({ token });
});

app.post("/auth/register", (req, res) => {
  const { name, email, password } = req.body;
  // 注册逻辑
  res.status(201).send();
});

权限控制

在路由守卫中检查用户是否登录:

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

表单验证

可以使用 vee-validate 或手动验证:

methods: {
  validateEmail(email) {
    const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return re.test(email);
  },
  validatePassword(password) {
    return password.length >= 6;
  },
},

安全性建议

  • 使用 HTTPS 传输数据
  • 密码加密存储(如 bcrypt)
  • 限制登录尝试次数
  • 使用 JWT 过期时间

以上步骤涵盖了 Vue 项目中实现注册登录功能的主要方面,可以根据实际需求调整细节。

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

相关文章

vue实现下拉框删除

vue实现下拉框删除

Vue 实现下拉框删除功能 在Vue中实现下拉框的删除功能通常涉及以下步骤: 数据绑定与渲染 在Vue组件中定义数据数组用于存储下拉框选项: data() { return {…

vue实现试卷

vue实现试卷

Vue实现试卷系统的基本思路 使用Vue.js构建试卷系统需要结合组件化开发、状态管理和后端数据交互。核心功能包括题目展示、答题逻辑、计时器和提交答案。 核心功能模块划分 试卷组件结构 试卷容…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue实现答辩

vue实现答辩

Vue 实现答辩系统的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Pinia/Vuex 进行状态管理。配置 ESLint 和 Pre…

vue实现swiper

vue实现swiper

Vue 中实现 Swiper 的方法 安装 Swiper 依赖 在 Vue 项目中安装 Swiper 和相关依赖: npm install swiper vue-awesome-swiper 全局引…

vue实现画板

vue实现画板

Vue 实现画板功能 在 Vue 中实现画板功能可以通过 HTML5 的 Canvas API 实现。以下是一个完整的实现方案: 创建 Vue 组件 新建一个 Vue 单文件组件(SFC),命名为…