Add refresh token

This commit is contained in:
NicolasCantu 2025-05-06 16:44:40 +02:00
parent 0f364c7c6e
commit cfc9514656

View File

@ -60,28 +60,34 @@ export default class TokenService {
console.error('Erreur de validation du token:', error); console.error('Erreur de validation du token:', error);
return false; return false;
} }
return true;
} }
removeToken(token: string): void { async refreshAccessToken(refreshToken: string, origin: string): Promise<string | null> {
this.tokens.delete(token); try {
this.saveTokensToStorage(); // Vérifier si le refresh token est valide
} const isValid = await this.validateToken(refreshToken, origin);
if (!isValid) {
cleanExpiredTokens(): void { return null;
const now = Date.now();
let hasExpired = false;
for (const [token, data] of this.tokens.entries()) {
if (data.expiration < now) {
this.tokens.delete(token);
hasExpired = true;
} }
}
// Vérifier le type du token
if (hasExpired) { const secret = new Uint8Array(this.encoder.encode(this.SECRET_KEY));
this.saveTokensToStorage(); const { payload } = await jose.jwtVerify(refreshToken, secret);
if (payload.type !== 'refresh') {
return null;
}
// Générer un nouveau access token
const newAccessToken = await new jose.SignJWT({ origin, type: 'access' })
.setProtectedHeader({ alg: 'HS256' })
.setIssuedAt()
.setExpirationTime(this.ACCESS_TOKEN_EXPIRATION)
.sign(secret);
return newAccessToken;
} catch (error) {
console.error('Erreur lors du refresh du token:', error);
return null;
} }
} }
} }