이메일로 받은 비밀번호 재설정 링크의 도착 지점. 사용자가 새 비밀번호를 입력하면 서버 /auth/reset-password 를 호출해 변경을 마무리한다. 앱이 아닌 웹에 둔 이유는 이메일 클라이언트가 보통 브라우저로 링크를 열기 때문 (앱 deep link 강제 불가).
forgotPassword 발송 시 메일 본문에 다음 형식 링크 포함:${RESET_PW_BASE_URL}/reset-password?token=XXX&uid=NN/reset-password 단독 진입은 token/uid 없어서 에러 UI).token: string (32바이트 hex)uid: numeric string (user id)POST {API_BASE}/auth/reset-password
Body: { userId: number, token: string, newPassword: string }
const API_BASE =
window.location.hostname === 'localhost'
? 'http://localhost:3030'
: 'https://grameow-server-production.up.railway.app';
이 페이지 자체가 도착점이라 다른 코드에서 호출되지 않는다. 사용자가 URL로 직접 진입하는 형태.
https://grameow-web.vercel.app/reset-password?token=a1b2c3...&uid=42
서버에서 발송하는 메일 본문 예시는 grameow-server/src/auth/mailer.service.ts 참고.
form.hidden = true 안 먹음: Astro의 scoped CSS와 충돌로 form hidden 속성이 자식 input/button까지 안 숨김. form.style.display = 'none' 명시 + description text 도 별도로 숨겨야 함 (실제 버그 수정 사례).{ message } 본문 주면 그대로 표시. 토큰 만료/사용 완료 케이스 안내.as HTMLFormElement 등은 Astro 빌드 시 정상 stripping 됨.submitBtn.disabled = false + textContent 복구.src/layouts/Layout.astrogrameow-server/src/auth/auth.controller.ts POST /auth/reset-password