채팅: 토큰 검증을 도배 제한보다 먼저 수행

미인증 요청이 남의 닉네임 전송 쿨다운을 소모해 정당한 유저를
429로 막을 수 있던 순서 결함 수정.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
이 커밋은 다음에 포함됨:
kjs
2026-08-14 16:40:39 +09:00
co-authored by Claude Fable 5
부모 ad157bc4fe
커밋 6696e6bd54
+4 -2
파일 보기
@@ -49,9 +49,8 @@ export async function sendChat(
): Promise<string | null> {
const text = rawText.replace(/\s+/g, " ").trim().slice(0, CHAT_MAX_LEN);
if (!text) return "empty";
const now = Date.now();
if (now - (lastSent.get(nickname) ?? 0) < MIN_INTERVAL_MS) return "too_fast";
// 인증을 도배 제한보다 먼저 — 미인증 요청이 남의 닉네임 전송 쿨다운을 소모하지 못하도록
await ensureVillages();
const owner = await db.query(
"SELECT 1 FROM villages WHERE nickname = $1 AND token = $2",
@@ -59,6 +58,9 @@ export async function sendChat(
);
if (owner.rowCount === 0) return "auth";
const now = Date.now();
if (now - (lastSent.get(nickname) ?? 0) < MIN_INTERVAL_MS) return "too_fast";
await ensureChatTable();
const r = await db.query(
"INSERT INTO chat_messages (nickname, text) VALUES ($1, $2) RETURNING id, extract(epoch from created_at) * 1000 AS at",