Files
XRLMS/app/api/users/login/route.ts

49 lines
1.5 KiB
TypeScript
Raw Normal View History

2025-11-10 21:57:28 +09:00
import { NextRequest, NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import bcrypt from 'bcryptjs';
// POST - 로그인
export async function POST(request: NextRequest) {
try {
const body = await request.json();
const { email, password } = body;
if (!email || !password) {
return NextResponse.json({ error: '이메일과 비밀번호를 입력해주세요.' }, { status: 400 });
}
// 사용자 조회
const user = await prisma.user.findUnique({
where: { email },
});
if (!user) {
return NextResponse.json({ error: '아이디 또는 비밀번호가 올바르지 않습니다.' }, { status: 401 });
}
// 계정 활성화 확인
if (!user.isActive) {
return NextResponse.json({ error: '비활성화된 계정입니다.' }, { status: 403 });
}
// 비밀번호 확인
const isPasswordValid = await bcrypt.compare(password, user.password);
if (!isPasswordValid) {
return NextResponse.json({ error: '아이디 또는 비밀번호가 올바르지 않습니다.' }, { status: 401 });
}
// 비밀번호 제외하고 사용자 정보 반환
const { password: _, ...userWithoutPassword } = user;
return NextResponse.json({
user: userWithoutPassword,
message: '로그인 성공',
});
} catch (error) {
console.error('Error during login:', error);
return NextResponse.json({ error: '로그인 중 오류가 발생했습니다.' }, { status: 500 });
}
}