当前位置:首页 > VUE

vue登录注册实现

2026-03-28 16:44:13VUE

实现Vue登录注册功能

在Vue项目中实现登录注册功能需要前后端配合,以下是基于Vue 3和axios的完整实现方案:

前端实现

安装必要依赖:

npm install axios vue-router pinia

创建authStore存储状态(使用Pinia):

vue登录注册实现

// stores/auth.js
import { defineStore } from 'pinia'

export const useAuthStore = defineStore('auth', {
  state: () => ({
    user: null,
    token: localStorage.getItem('token') || ''
  }),
  actions: {
    async register(userData) {
      const response = await axios.post('/api/register', userData)
      this.token = response.data.token
      localStorage.setItem('token', this.token)
    },
    async login(credentials) {
      const response = await axios.post('/api/login', credentials)
      this.token = response.data.token
      localStorage.setItem('token', this.token)
    },
    logout() {
      this.token = ''
      localStorage.removeItem('token')
    }
  }
})

创建登录组件:

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="email" type="email" placeholder="Email">
    <input v-model="password" type="password" placeholder="Password">
    <button type="submit">Login</button>
  </form>
</template>

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

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

const handleLogin = async () => {
  try {
    await authStore.login({
      email: email.value,
      password: password.value
    })
    router.push('/dashboard')
  } catch (error) {
    console.error('Login failed:', error)
  }
}
</script>

后端API示例(Node.js Express)

// server.js
const express = require('express')
const jwt = require('jsonwebtoken')
const app = express()

app.use(express.json())

const users = []

app.post('/api/register', (req, res) => {
  const { email, password } = req.body
  const user = { id: users.length + 1, email, password }
  users.push(user)

  const token = jwt.sign({ userId: user.id }, 'your-secret-key', { expiresIn: '1h' })
  res.json({ token })
})

app.post('/api/login', (req, res) => {
  const { email, password } = req.body
  const user = users.find(u => u.email === email && u.password === password)

  if (!user) return res.status(401).json({ error: 'Invalid credentials' })

  const token = jwt.sign({ userId: user.id }, 'your-secret-key', { expiresIn: '1h' })
  res.json({ token })
})

路由保护

添加路由守卫保护需要认证的页面:

vue登录注册实现

// router.js
import { createRouter } from 'vue-router'
import { useAuthStore } from './stores/auth'

const router = createRouter({
  // ...路由配置
})

router.beforeEach((to) => {
  const authStore = useAuthStore()
  if (to.meta.requiresAuth && !authStore.token) {
    return '/login'
  }
})

表单验证

使用VeeValidate进行表单验证:

npm install vee-validate @vee-validate/rules

示例验证配置:

import { defineRule, configure } from 'vee-validate'
import { required, email, min } from '@vee-validate/rules'

defineRule('required', required)
defineRule('email', email)
defineRule('min', min)

configure({
  validateOnInput: true,
})

安全注意事项

  1. 始终使用HTTPS传输敏感数据
  2. 后端应使用bcrypt等库哈希存储密码
  3. 实现CSRF保护
  4. 设置合理的JWT过期时间
  5. 前端存储token应使用httpOnly cookie更安全

以上实现提供了Vue项目中登录注册功能的核心代码,可根据实际需求进行扩展和优化。

标签: vue
分享给朋友:

相关文章

vue实现飘窗原理

vue实现飘窗原理

vue实现飘窗原理 飘窗效果通常指在页面上悬浮显示的弹窗或通知,跟随页面滚动或固定在某个位置。Vue实现这一效果主要依赖组件化开发、CSS定位和动态数据绑定。 组件结构设计 创建一个独立的Vue组件…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置 使…

jquery实现vue

jquery实现vue

jQuery 和 Vue.js 是两种不同理念的前端工具,jQuery 以 DOM 操作和事件驱动为核心,而 Vue.js 是数据驱动的现代化框架。如果想用 jQuery 实现类似 Vue 的功能(如…

vue单选实现

vue单选实现

Vue 单选实现 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选效果。当用户选择不同的选…

vue 实现分屏

vue 实现分屏

Vue 实现分屏的方法 使用 CSS Flexbox 或 Grid 布局 通过 CSS Flexbox 或 Grid 布局可以轻松实现分屏效果。在 Vue 组件中定义两个或多个区域,并使用 CSS 控…

vue实现画板

vue实现画板

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