From 6ace99c9a414dbca450878672ca41f86f6b5193e Mon Sep 17 00:00:00 2001 From: caadiq Date: Thu, 23 Apr 2026 14:58:29 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20/link/verify=20=ED=83=80=EC=9E=84?= =?UTF-8?q?=EC=A1=B4=20=EB=B6=88=EC=9D=BC=EC=B9=98=EB=A1=9C=20=ED=95=AD?= =?UTF-8?q?=EC=83=81=20=ED=86=A0=ED=81=B0=20=EB=A7=8C=EB=A3=8C=20=ED=8C=90?= =?UTF-8?q?=EC=A0=95=EB=90=98=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Node 프로세스는 UTC로 token_expires를 저장하는데 MariaDB 세션 TZ가 +09:00(KST)이어서 NOW()가 KST 벽시계를 반환, "05:54 > 14:47" 비교가 항상 false가 되어 유효한 토큰도 만료로 처리되던 문제. 쿼리의 NOW()를 UTC_TIMESTAMP()로 변경해 양쪽 다 UTC 벽시계 기준으로 비교하도록 정정. Co-Authored-By: Claude Opus 4.7 (1M context) --- backend/routes/link.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/routes/link.js b/backend/routes/link.js index 8da7fda..bda595e 100644 --- a/backend/routes/link.js +++ b/backend/routes/link.js @@ -277,9 +277,10 @@ router.post("/verify", async (req, res) => { }); } - // 토큰 검증 + // 토큰 검증 (UTC_TIMESTAMP() 사용: token_expires는 Node가 UTC 벽시계로 저장하므로 + // 세션 TZ가 UTC가 아닌 환경에서도 일관된 비교를 보장) const [links] = await pool.query( - "SELECT * FROM minecraft_links WHERE link_token = ? AND token_expires > NOW()", + "SELECT * FROM minecraft_links WHERE link_token = ? AND token_expires > UTC_TIMESTAMP()", [token.toUpperCase()] );