当前位置:首页 > VUE

vue实现简单登录注册

2026-01-21 23:54:05VUE

Vue 实现登录注册功能

项目初始化

使用 Vue CLI 创建项目

vue create auth-demo
cd auth-demo

安装必要依赖

npm install axios vue-router

路由配置

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 }
  ]
})

登录组件

创建 src/views/Login.vue

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

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

注册组件

创建 src/views/Register.vue

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

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

API 请求封装

创建 src/api/auth.js

import axios from 'axios'

const api = axios.create({
  baseURL: 'http://your-api-url.com'
})

export default {
  login(credentials) {
    return api.post('/login', credentials)
  },
  register(info) {
    return api.post('/register', info)
  }
}

状态管理(可选)

如需使用 Vuex 管理登录状态,创建 src/store/index.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  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')
    }
  }
})

导航守卫

src/router/index.js 中添加导航守卫

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token')
  if (to.path !== '/login' && to.path !== '/register' && !isAuthenticated) {
    return next('/login')
  }
  next()
})

样式设计

添加基础样式到 App.vue

<style>
form {
  display: flex;
  flex-direction: column;
  max-width: 300px;
  margin: 0 auto;
}
input {
  margin: 5px 0;
  padding: 8px;
}
button {
  margin-top: 10px;
  padding: 8px;
}
</style>

后端接口示例

Node.js Express 示例

// 登录接口
app.post('/api/login', (req, res) => {
  // 验证用户信息
  // 返回 token
  res.json({ token: 'generated-jwt-token' })
})

// 注册接口
app.post('/api/register', (req, res) => {
  // 保存用户信息
  res.json({ success: true })
})

表单验证增强

使用 Vuelidate 进行表单验证

npm install vuelidate

在组件中添加验证

import { required, email } from 'vuelidate/lib/validators'

export default {
  data() {
    return {
      email: '',
      password: ''
    }
  },
  validations: {
    email: { required, email },
    password: { required }
  }
}

响应式布局

添加响应式样式

@media (max-width: 600px) {
  form {
    width: 90%;
  }
}

vue实现简单登录注册

标签: 简单vue
分享给朋友:

相关文章

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas…

vue实现pwa

vue实现pwa

Vue 实现 PWA 的步骤 Vue 结合 PWA(Progressive Web App)可以创建离线可用的 Web 应用。以下是实现方法: 安装 Vue CLI 并创建项目 确保已安装 Vue…

vue实现兼容

vue实现兼容

Vue 兼容性实现方案 Vue.js 的兼容性主要涉及对不同浏览器、Vue 版本以及第三方库的支持。以下是常见的兼容性解决方案: 浏览器兼容性 使用 Babel 转换 ES6+ 代码为 ES5…