当前位置:首页 > 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 中实现登录表单和逻辑:

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 中定义:

vue实现注册登陆

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 中实现登录后的主页:

<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 中实现查询替换功能,可以通过数据绑定和字符串操作方法结合实现。以下是具体实现方式: 基础实现 <template> <div>…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue实现登出

vue实现登出

实现Vue登出功能 登出功能通常涉及清除用户会话、令牌或本地存储的数据,并重定向到登录页面。以下是几种常见的实现方式: 清除用户令牌和状态 在Vuex的store中定义一个logout mutati…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…

vue nexttick实现

vue nexttick实现

Vue 中 nextTick 的实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它的核心实现依赖于 JavaScript 的事件循环机制。 基本…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…