vue登录注册实现
实现Vue登录注册功能
在Vue项目中实现登录注册功能需要前后端配合,以下是基于Vue 3和axios的完整实现方案:
前端实现
安装必要依赖:
npm install axios vue-router pinia
创建authStore存储状态(使用Pinia):

// 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 })
})
路由保护
添加路由守卫保护需要认证的页面:

// 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,
})
安全注意事项
- 始终使用HTTPS传输敏感数据
- 后端应使用bcrypt等库哈希存储密码
- 实现CSRF保护
- 设置合理的JWT过期时间
- 前端存储token应使用httpOnly cookie更安全
以上实现提供了Vue项目中登录注册功能的核心代码,可根据实际需求进行扩展和优化。






