Aim to mention 20-40 concrete checks. This expanded list helps you turn a short answer into a structured senior-style response.
Existing users can request a reset email and reach the reset form from the latest valid link.
Unknown emails get a generic success response without revealing account existence.
New password and confirm password are validated together.
After reset, the new password works and the old password no longer works.
Expired, reused, invalid, malformed, and old tokens are rejected.
Multiple reset requests invalidate older links if required.
Network failures during request or submit show recoverable messages.
Email provider delay, queue failure, and backend 500 states are handled.
Tokens are random, single-use, scoped to the correct user, and not logged or leaked.
Rate limiting protects per email and per IP without enabling enumeration.
Existing sessions, refresh tokens, and remember-me sessions are invalidated when required.
CSRF, XSS, open redirect, HTTPS, noindex, and cache safety are checked.
Email instructions are clear without exposing whether the account exists.
Password rules, mismatch errors, labels, focus states, and screen reader errors work.
Double-click submit and concurrent token use do not create inconsistent state.
Structure your answer: Start with reset request, email delivery, reset link, password change, and login with the new password.
Structure your answer: Add token cases: expired, reused, invalid, old token after new request, and token for wrong user.
Structure your answer: Add security: generic response, rate limiting, token leakage, session invalidation, CSRF, XSS, and open redirects.
Structure your answer: Add reliability and UX: provider delay, backend errors, clear messages, accessibility, and mobile behavior.
Do not miss: Unknown email enumeration risk.
Do not miss: Old reset email after a newer reset request.
Do not miss: Session and refresh token invalidation.
Do not miss: Email scanner or link preview behavior.