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);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user