BCard - Documentation technique

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

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.


        
On this page

Search results