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);
return false;
}
return true;
}
removeToken(token: string): void {
this.tokens.delete(token);
this.saveTokensToStorage();
}
cleanExpiredTokens(): void {
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;
async refreshAccessToken(refreshToken: string, origin: string): Promise<string | null> {
try {
// Vérifier si le refresh token est valide
const isValid = await this.validateToken(refreshToken, origin);
if (!isValid) {
return null;
}
}
if (hasExpired) {
this.saveTokensToStorage();
// Vérifier le type du token
const secret = new Uint8Array(this.encoder.encode(this.SECRET_KEY));
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;
}
}
}