58 $dateCreation =
new DateTime();
59 $dateExpiration = (clone $dateCreation)->modify(
'+1 hour');
61 $sql =
"INSERT INTO passwordResetToken (token, emailUtilisateur, dateCreation, dateExpiration, estUtilise)
62 VALUES (:token, :email, :dateCreation, :dateExpiration, 0)";
64 $stmt = $this->pdo->prepare($sql);
65 $result = $stmt->execute([
66 ':token' => $tokenValue,
68 ':dateCreation' => $dateCreation->format(
'Y-m-d H:i:s'),
69 ':dateExpiration' => $dateExpiration->format(
'Y-m-d H:i:s')
74 (
int)$this->pdo->lastInsertId(),
94 $sql =
"SELECT * FROM passwordResetToken WHERE token = :token";
95 $stmt = $this->pdo->prepare($sql);
96 $stmt->execute([
':token' => $token]);
97 $row = $stmt->fetch(PDO::FETCH_ASSOC);
119 $sql =
"SELECT * FROM passwordResetToken
122 AND dateExpiration > NOW()";
123 $stmt = $this->pdo->prepare($sql);
124 $stmt->execute([
':token' => $token]);
125 $row = $stmt->fetch(PDO::FETCH_ASSOC);
142 $sql =
"SELECT * FROM passwordResetToken
143 WHERE emailUtilisateur = :email
145 AND dateExpiration > NOW()
146 ORDER BY dateCreation DESC";
147 $stmt = $this->pdo->prepare($sql);
148 $stmt->execute([
':email' => $email]);
149 $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
165 $sql =
"UPDATE passwordResetToken SET estUtilise = 1 WHERE token = :token";
166 $stmt = $this->pdo->prepare($sql);
167 return $stmt->execute([
':token' => $token]);
181 $sql =
"UPDATE passwordResetToken SET estUtilise = 1
182 WHERE emailUtilisateur = :email AND estUtilise = 0";
183 $stmt = $this->pdo->prepare($sql);
184 return $stmt->execute([
':email' => $email]);
197 $sql =
"DELETE FROM passwordResetToken WHERE dateExpiration < NOW()";
198 $stmt = $this->pdo->prepare($sql);
200 return $stmt->rowCount();
215 $hashedPassword = password_hash($nouveauMotDePasse, PASSWORD_ARGON2ID);
217 $sql =
"UPDATE utilisateur SET motDePasseUtilisateur = :password
218 WHERE emailUtilisateur = :email";
219 $stmt = $this->pdo->prepare($sql);
220 return $stmt->execute([
221 ':password' => $hashedPassword,
235 (
int)$row[
'idToken'],
237 $row[
'emailUtilisateur'],
238 new DateTime($row[
'dateCreation']),
239 new DateTime($row[
'dateExpiration']),
240 (
bool)$row[
'estUtilise']
253 foreach ($rows as $row) {
254 $tokens[] = $this->
hydrate($row);
Data Access Object pour les tokens de réinitialisation de mot de passe.
__construct(?PDO $pdo)
Constructeur de la classe PasswordResetTokenDAO.
create(string $email)
Crée un nouveau token de réinitialisation de mot de passe.
deleteExpiredTokens()
Supprime les tokens expirés de la base de données.
hydrateAll(array $rows)
Hydrate un tableau de lignes en tableau d'objets PasswordResetToken.
getPdo()
Récupère l'instance PDO.
setPdo(?PDO $pdo)
Définit l'instance PDO.
updatePassword(string $email, string $nouveauMotDePasse)
Met à jour le mot de passe d'un utilisateur.
markAsUsed(string $token)
Marque un token comme utilisé.
findValidToken(string $token)
Recherche un token valide par sa valeur.
findByToken(string $token)
Recherche un token par sa valeur.
invalidateTokensForUser(string $email)
Invalide tous les tokens d'un utilisateur.
hydrate(array $row)
Hydrate un tableau de données en objet PasswordResetToken.
findActiveTokensByEmail(string $email)
Recherche tous les tokens actifs d'un utilisateur.
Entité représentant un token de réinitialisation de mot de passe.
static genererToken()
Génère un nouveau token sécurisé.