Your Name b1eab32c75 初始提交: FLNXI电商素材系统官方网站
- Next.js 项目框架
- 完整的认证系统集成
- 数据库配置和部署脚本
- 产品价格体系和文档
- Docker 部署配置
2025-12-13 21:38:32 +08:00

116 lines
2.8 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import bcrypt from 'bcryptjs'
import { db } from '@/lib/db'
export async function POST(request: NextRequest) {
try {
const body = await request.json()
const { name, email, password } = body
// 验证必填字段
if (!name || !email || !password) {
return NextResponse.json(
{ message: '请填写所有必填字段' },
{ status: 400 }
)
}
// 验证邮箱格式
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
if (!emailRegex.test(email)) {
return NextResponse.json(
{ message: '请输入有效的邮箱地址' },
{ status: 400 }
)
}
// 验证密码长度
if (password.length < 6) {
return NextResponse.json(
{ message: '密码长度至少6位' },
{ status: 400 }
)
}
// 检查邮箱是否已存在
const existingUser = await db.findUserByEmail(email)
if (existingUser) {
return NextResponse.json(
{ message: '该邮箱已被注册' },
{ status: 409 }
)
}
// 使用 bcrypt 加密密码
const saltRounds = 10
const hashedPassword = await bcrypt.hash(password, saltRounds)
// 创建新用户
const newUser = await db.createUser(name, email, hashedPassword)
console.log('✅ 新用户注册成功:', {
id: newUser.id,
name: newUser.name,
email: newUser.email,
createdAt: newUser.created_at,
})
// 返回成功响应(不返回密码)
return NextResponse.json(
{
message: '注册成功',
user: {
id: newUser.id,
name: newUser.name,
email: newUser.email,
},
},
{ status: 201 }
)
} catch (error) {
console.error('注册错误:', error)
// 处理数据库唯一约束错误
if (error instanceof Error && error.message.includes('duplicate key')) {
return NextResponse.json(
{ message: '该邮箱已被注册' },
{ status: 409 }
)
}
return NextResponse.json(
{ message: '服务器错误,请稍后重试' },
{ status: 500 }
)
}
}
// 获取已注册用户列表(管理员功能)
export async function GET(request: NextRequest) {
try {
// TODO: 添加管理员权限验证
const users = await db.getAllUsers()
return NextResponse.json(
{
total: users.length,
users: users.map(user => ({
id: user.id,
name: user.name,
email: user.email,
emailVerified: user.email_verified,
createdAt: user.created_at,
})),
},
{ status: 200 }
)
} catch (error) {
console.error('获取用户列表错误:', error)
return NextResponse.json(
{ message: '服务器错误' },
{ status: 500 }
)
}
}