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

33 lines
1.2 KiB
TypeScript

import { NextResponse } from "next/server";
import { prisma } from "@/lib/db";
import { verifyPassword } from "@/lib/auth/password";
import { userHasBoundThreadsAccount } from "@/lib/auth/accounts";
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 };
const email = body.email?.trim().toLowerCase();
const password = body.password ?? "";
if (!email || !password) {
return NextResponse.json({ error: "請輸入 Email 與密碼" }, { status: 400 });
}
const user = await prisma.user.findUnique({ where: { email } });
if (!user || !verifyPassword(password, user.passwordHash)) {
return NextResponse.json({ error: "Email 或密碼錯誤" }, { status: 401 });
}
await createSession(user.id);
const needsThreadsBind = !(await userHasBoundThreadsAccount(user.id));
return NextResponse.json({
user: { id: user.id, email: user.email, name: user.name },
needsThreadsBind,
});
} catch (error) {
return apiRouteErrorResponse(error, "auth/login");
}
}