RefreshTokenService
in package
Gère le cycle de vie des jetons de rafraîchissement de l'API.
Le service crée, valide, révoque et purge les entités RefreshToken utilisées par
l'authentification JWT de l'API mobile. Le lien avec le compte n'est pas une relation
Doctrine mais l'adresse e-mail stockée dans le champ username : changer l'e-mail d'un
utilisateur invalide donc de fait ses jetons. Toutes les méthodes de mutation écrivent
immédiatement en base (flush()), et la politique retenue est celle d'un jeton unique par
utilisateur, les précédents étant supprimés à chaque nouvelle émission.
Table of Contents
Properties
- $entityManager : EntityManagerInterface
- $ttl : int
Methods
- __construct() : mixed
- cleanExpiredTokens() : int
- Nettoie les refresh tokens expirés
- createRefreshToken() : RefreshToken
- Génère un nouveau refresh token pour un utilisateur
- revokeRefreshToken() : bool
- Révoque un refresh token spécifique
- revokeUserRefreshTokens() : void
- Révoque tous les refresh tokens d'un utilisateur
- validateRefreshToken() : User|null
- Valide un refresh token et retourne l'utilisateur associé
- generateToken() : string
- Génère un token aléatoire sécurisé
Properties
$entityManager
private
EntityManagerInterface
$entityManager
$ttl
private
int
$ttl
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager[, int $ttl = 2592000 ]) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Gestionnaire Doctrine assurant la persistance et la suppression des jetons.
- $ttl : int = 2592000
-
Durée de validité d'un jeton en secondes ; 2 592 000 s, soit 30 jours, par défaut.
cleanExpiredTokens()
Nettoie les refresh tokens expirés
public
cleanExpiredTokens() : int
Exécute un DELETE DQL en masse sur tous les jetons dont la date de validité est antérieure à l'instant courant. S'agissant d'une requête directe, elle contourne l'unité de travail de Doctrine : les entités déjà chargées en mémoire ne sont pas synchronisées. Destinée à une exécution périodique (tâche planifiée ou commande).
Return values
int —Nombre de lignes supprimées.
createRefreshToken()
Génère un nouveau refresh token pour un utilisateur
public
createRefreshToken(User $user) : RefreshToken
Révoque d'abord l'intégralité des jetons existants de l'utilisateur via
self::revokeUserRefreshTokens() — un seul jeton reste donc valide à la fois,
et une nouvelle connexion déconnecte les sessions API précédentes. Le jeton est
ensuite créé avec une valeur aléatoire, l'e-mail de l'utilisateur comme identifiant
et une date de validité calculée à partir du TTL configuré. Effets de bord :
suppressions puis insertion en base, chacune suivie d'un flush().
Parameters
- $user : User
-
Utilisateur pour lequel émettre le jeton ; son e-mail sert de clé de rattachement.
Return values
RefreshToken —Jeton persisté et immédiatement utilisable.
revokeRefreshToken()
Révoque un refresh token spécifique
public
revokeRefreshToken(string $refreshTokenString) : bool
La révocation est une suppression définitive de la ligne en base, suivie d'un
flush() immédiat ; aucun marquage logique n'est conservé. Typiquement appelée lors
d'une déconnexion.
Parameters
- $refreshTokenString : string
-
Valeur brute du jeton à révoquer.
Return values
bool —true si un jeton correspondant a été trouvé et supprimé, false si aucun ne correspondait.
revokeUserRefreshTokens()
Révoque tous les refresh tokens d'un utilisateur
public
revokeUserRefreshTokens(User $user) : void
Sélectionne les jetons par l'e-mail de l'utilisateur, les marque tous pour
suppression puis effectue un unique flush(). Celui-ci est exécuté même lorsque
aucun jeton n'a été trouvé. Sert notamment de préalable à
self::createRefreshToken() pour garantir l'unicité du jeton actif.
Parameters
- $user : User
-
Utilisateur dont toutes les sessions API doivent être invalidées.
validateRefreshToken()
Valide un refresh token et retourne l'utilisateur associé
public
validateRefreshToken(string $refreshTokenString) : User|null
Recherche le jeton par sa valeur, contrôle qu'il n'est pas expiré, puis résout
l'utilisateur à partir de l'e-mail stocké dans son champ username. Effet de bord :
un jeton expiré est supprimé de la base (remove() + flush()) au passage. Le
jeton n'est pas renouvelé ni prolongé par cette vérification.
Parameters
- $refreshTokenString : string
-
Valeur brute du jeton présentée par le client.
Return values
User|null —Utilisateur correspondant, ou null si le jeton est inconnu, expiré,
ou si aucun compte ne porte l'e-mail qui y est enregistré.
generateToken()
Génère un token aléatoire sécurisé
private
generateToken() : string
Tire 32 octets auprès du générateur cryptographiquement sûr de PHP et les encode en hexadécimal, produisant une chaîne de 64 caractères. Aucune vérification d'unicité en base n'est effectuée, la probabilité de collision étant négligeable.
Return values
string —Chaîne hexadécimale de 64 caractères.