패스워드 저장 방법
패스워드는 절대 평문으로 저장하면 안 되고, 해싱해서 저장해야 합니다.
1. bcrypt 설치
pnpm add bcrypt
pnpm add -D @types/bcrypt
2. 회원가입 시 패스워드 해싱
// app/api/auth/signup/route.ts
import bcrypt from 'bcrypt';
import { prisma } from '@/lib/prisma';
export async function POST(request: Request) {
const { email, nickname, password } = await request.json();
// 패스워드 해싱 (saltRounds: 10~12 권장)
const hashedPassword = await bcrypt.hash(password, 10);
const user = await prisma.user.create({
data: {
email,
nickname,
password: hashedPassword, // 해싱된 패스워드 저장
},
});
return Response.json({ user: { id: user.id, email: user.email } });
}
3. 로그인 시 패스워드 검증
// 로그인 시
const isValidPassword = await bcrypt.compare(inputPassword, user.password);
핵심:
- DB에는 해싱된 패스워드만 저장
- 로그인 시에는 입력받은 평문 패스워드를 bcrypt.compare()로 검증
- saltRounds는 10~12 정도가 적당 (보안 vs 성능 균형)
'TIL' 카테고리의 다른 글
[250807 TIL] CF Function + Next static build (2) | 2025.08.07 |
---|---|
[250807 TIL] Hosts (1) | 2025.08.07 |
[250719 TIL] Prisma 마이그레이션 (0) | 2025.07.19 |
[250719 TIL] SSO, OAuth (0) | 2025.07.19 |
[250719 TIL] Prisma seeding (0) | 2025.07.19 |