haixunMaster/app/api/auth/register/route.ts

47 lines
1.4 KiB
TypeScript

import { NextResponse } from "next/server";
import { prisma } from "@/lib/db";
import { hashPassword } from "@/lib/auth/password";
import { createSession } from "@/lib/auth/session";
import { apiRouteErrorResponse } from "@/lib/auth/api";
export async function POST(request: Request) {
try {
const body = (await request.json().catch(() => ({}))) as {
email?: string;
password?: string;
name?: string;
};
const email = body.email?.trim().toLowerCase();
const password = body.password ?? "";
const name = body.name?.trim() || null;
if (!email || !password) {
return NextResponse.json({ error: "請輸入 Email 與密碼" }, { status: 400 });
}
if (password.length < 6) {
return NextResponse.json({ error: "密碼至少 6 個字元" }, { status: 400 });
}
const existing = await prisma.user.findUnique({ where: { email } });
if (existing) {
return NextResponse.json({ error: "此 Email 已註冊" }, { status: 409 });
}
const user = await prisma.user.create({
data: {
email,
name,
passwordHash: hashPassword(password),
},
});
await createSession(user.id);
return NextResponse.json({
user: { id: user.id, email: user.email, name: user.name },
needsThreadsBind: true,
});
} catch (error) {
return apiRouteErrorResponse(error, "auth/register");
}
}