마이페이지, 리포트, 메일인증
CI / test (push) Failing after 13m23s
CI / e2e (push) Has been cancelled
CI / pr_and_merge (push) Has been cancelled

This commit is contained in:
2025-12-15 21:59:43 +09:00
parent a8e1a4a960
commit 87cdc1868b
30 changed files with 5488 additions and 16 deletions
+16 -4
View File
@@ -1,10 +1,14 @@
import { NextResponse } from "next/server";
import { PrismaClient } from "@prisma/client";
import { verifyAccessToken } from "@/features/auth/authCrypto";
// /api/auth/me
// - 요청 쿠키에 포함된 JWT(pb_access)를 검증하고,
// - 유효한 경우 토큰에서 식별 가능한 유저 정보를 반환한다.
// - 유효한 경우 JWT 의 sub(id) 를 기준으로 실제 DB(User) 에서 최신 유저 정보를 조회해 반환한다.
// - 이렇게 하면 emailVerified 와 같은 필드가 브라우저/세션에 관계없이 항상 DB 기준으로 일관되게 반영된다.
const prisma = new PrismaClient();
function extractTokenFromCookieHeader(cookieHeader: string | null): string | null {
if (!cookieHeader) return null;
@@ -34,10 +38,18 @@ export async function GET(request: Request) {
return NextResponse.json({ message: "유효하지 않은 토큰입니다." }, { status: 401 });
}
// JWT 에서 식별한 ID 를 기준으로 실제 User 를 조회해 최신 정보를 사용한다.
const dbUser = await prisma.user.findUnique({ where: { id: payload.sub } });
if (!dbUser) {
return NextResponse.json({ message: "사용자를 찾을 수 없습니다." }, { status: 401 });
}
const user = {
id: payload.sub,
email: payload.email,
tokenVersion: payload.tokenVersion,
id: dbUser.id,
email: dbUser.email,
tokenVersion: (dbUser as any).tokenVersion,
emailVerified: (dbUser as any).emailVerified ?? false,
};
return NextResponse.json(user, { status: 200 });