채팅: 토큰 검증을 도배 제한보다 먼저 수행
미인증 요청이 남의 닉네임 전송 쿨다운을 소모해 정당한 유저를 429로 막을 수 있던 순서 결함 수정. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
이 커밋은 다음에 포함됨:
+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",
|
||||
|
||||
새 이슈에서 참조
사용자 차단