PHPPHP20 min read

Password Reset Flow (Token-Based, Secure Design)

Build a real password reset system using random tokens, expiry, and safe verification steps.

Noah Parker
December 21, 2025
0.0k0

A password reset flow should never email a password. It should email a one-time token link. ## Standard flow ```mermaid flowchart TD A[User requests reset] --> B[Server creates token + expiry] B --> C[Email reset link with token] C --> D[User opens link] D --> E[Server validates token] E --> F[User sets new password] F --> G[Token invalidated] ``` ## Table example: password_resets ```sql CREATE TABLE password_resets ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, token_hash VARCHAR(255) NOT NULL, expires_at DATETIME NOT NULL, used_at DATETIME NULL ); ``` ## Key best practice Store token hash, not token itself. - create token - store hash(token) - email raw token - compare hashes when user returns > Next: Middleware-style routing, build cleaner APIs and controllers.

#PHP#Security#Auth#Advanced