prepare('SELECT id, email FROM users WHERE email = :email LIMIT 1'); $stmt->execute(['email' => $email]); $user = $stmt->fetch(); if ($user) { $token = strtoupper(substr(bin2hex(random_bytes(8)), 0, 12)); $hash = hash('sha256', $token); $expiresAt = date('Y-m-d H:i:s', time() + 900); $update = db()->prepare('UPDATE users SET reset_token_hash = :hash, reset_expires_at = :expires_at WHERE id = :id'); $update->execute([ 'hash' => $hash, 'expires_at' => $expiresAt, 'id' => (int) $user['id'], ]); error_log('RJLRESAKA reset token for ' . $email . ': ' . $token); set_flash('info', 'Token de démonstration généré : ' . $token . ' (également journalisé côté serveur, valide 15 min).'); } else { set_flash('info', 'Si ce compte existe, un token de réinitialisation a été généré.'); } } else { set_flash('warning', 'Veuillez saisir un email valide.'); } redirect('reset_password.php'); } render_header('Mot de passe oublié', ['description' => 'Générer un token de réinitialisation pour l’accès à RJLRESAKA.']); ?>

Réinitialisation

Mot de passe oublié

Saisissez votre email. Pour ce MVP, le token apparaît en notification et dans les logs serveur.