当前位置:首页 > VUE

vue实现注册登陆

2026-02-22 01:50:20VUE

Vue 实现注册登录功能

使用 Vue 实现注册登录功能通常需要结合 Vue Router 和状态管理工具(如 Vuex 或 Pinia),以及后端 API 进行数据交互。以下是实现的基本步骤和代码示例。

项目结构准备

确保已安装 Vue 和 Vue Router。如果尚未安装,可以通过以下命令初始化项目:

npm init vue@latest
# 选择 Router 和 Pinia(或其他状态管理工具)
cd your-project
npm install

路由配置

src/router/index.js 中配置登录和注册页面的路由:

import { createRouter, createWebHistory } from 'vue-router';
import Login from '../views/Login.vue';
import Register from '../views/Register.vue';
import Home from '../views/Home.vue';

const routes = [
  { path: '/login', component: Login },
  { path: '/register', component: Register },
  { path: '/', component: Home, meta: { requiresAuth: true } },
];

const router = createRouter({
  history: createWebHistory(),
  routes,
});

export default router;

登录页面实现

src/views/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>
    <p>还没有账号?<router-link to="/register">注册</router-link></p>
  </div>
</template>

<script setup>
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { useAuthStore } from '../stores/auth';

const email = ref('');
const password = ref('');
const router = useRouter();
const authStore = useAuthStore();

const handleLogin = async () => {
  try {
    await authStore.login({ email: email.value, password: password.value });
    router.push('/');
  } catch (error) {
    alert('登录失败:' + error.message);
  }
};
</script>

注册页面实现

src/views/Register.vue 中实现注册表单和逻辑:

<template>
  <div>
    <h2>注册</h2>
    <form @submit.prevent="handleRegister">
      <input v-model="email" type="email" placeholder="邮箱" required />
      <input v-model="password" type="password" placeholder="密码" required />
      <button type="submit">注册</button>
    </form>
    <p>已有账号?<router-link to="/login">登录</router-link></p>
  </div>
</template>

<script setup>
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { useAuthStore } from '../stores/auth';

const email = ref('');
const password = ref('');
const router = useRouter();
const authStore = useAuthStore();

const handleRegister = async () => {
  try {
    await authStore.register({ email: email.value, password: password.value });
    router.push('/login');
  } catch (error) {
    alert('注册失败:' + error.message);
  }
};
</script>

状态管理

使用 Pinia 管理用户认证状态。在 src/stores/auth.js 中定义:

import { defineStore } from 'pinia';
import { ref } from 'vue';
import { mockLogin, mockRegister } from '../api/auth';

export const useAuthStore = defineStore('auth', () => {
  const user = ref(null);
  const isAuthenticated = ref(false);

  const login = async (credentials) => {
    const response = await mockLogin(credentials);
    user.value = response.user;
    isAuthenticated.value = true;
  };

  const register = async (credentials) => {
    await mockRegister(credentials);
  };

  const logout = () => {
    user.value = null;
    isAuthenticated.value = false;
  };

  return { user, isAuthenticated, login, register, logout };
});

模拟 API

src/api/auth.js 中模拟 API 调用:

export const mockLogin = async ({ email, password }) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ user: { email, id: 1 } });
    }, 500);
  });
};

export const mockRegister = async ({ email, password }) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve();
    }, 500);
  });
};

路由守卫

src/router/index.js 中添加路由守卫,保护需要认证的页面:

router.beforeEach((to, from, next) => {
  const authStore = useAuthStore();
  if (to.meta.requiresAuth && !authStore.isAuthenticated) {
    next('/login');
  } else {
    next();
  }
});

主页面

src/views/Home.vue 中实现登录后的主页:

vue实现注册登陆

<template>
  <div>
    <h2>欢迎, {{ authStore.user?.email }}</h2>
    <button @click="authStore.logout">退出登录</button>
  </div>
</template>

<script setup>
import { useAuthStore } from '../stores/auth';

const authStore = useAuthStore();
</script>

注意事项

  1. 后端集成:上述示例使用了模拟 API,实际项目中需替换为真实的后端 API 调用(如 Axios 请求)。
  2. 表单验证:建议使用 vee-validate 或类似库增强表单验证。
  3. 安全性:确保密码传输使用 HTTPS,后端存储密码时应加密(如 bcrypt)。
  4. Token 管理:实际项目中通常使用 JWT 或 Session 管理登录状态,需在 Pinia 中存储 Token。

标签: vue
分享给朋友:

相关文章

vue实现签名

vue实现签名

实现Vue签名功能的步骤 安装签名库 使用vue-signature库可以快速实现签名功能。通过npm或yarn安装: npm install vue-signature --save # 或 ya…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template>…

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

vue实现接口

vue实现接口

在 Vue 中实现接口请求 Vue 本身不直接提供 HTTP 请求功能,通常需要借助第三方库如 axios 或 fetch 来实现接口请求。以下是几种常见方法: 使用 axios 发送请求 安装 a…

vue实现tabs

vue实现tabs

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