Add refresh token
This commit is contained in:
parent
0f364c7c6e
commit
cfc9514656
@ -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) {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanExpiredTokens(): void {
|
// Vérifier le type du token
|
||||||
const now = Date.now();
|
const secret = new Uint8Array(this.encoder.encode(this.SECRET_KEY));
|
||||||
let hasExpired = false;
|
const { payload } = await jose.jwtVerify(refreshToken, secret);
|
||||||
|
if (payload.type !== 'refresh') {
|
||||||
for (const [token, data] of this.tokens.entries()) {
|
return null;
|
||||||
if (data.expiration < now) {
|
|
||||||
this.tokens.delete(token);
|
|
||||||
hasExpired = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasExpired) {
|
// Générer un nouveau access token
|
||||||
this.saveTokensToStorage();
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user