First implementation of refresh token.

This commit is contained in:
Florian THIERRY
2024-09-03 10:37:58 +02:00
parent be34c555a5
commit 4d44b6f53c
7 changed files with 67 additions and 4 deletions
@@ -1,7 +1,10 @@
import { Injectable } from "@angular/core";
import { inject, Injectable } from "@angular/core";
import { User } from "../model/User";
import { UserRestService } from "../rest-services/user/user.rest-service";
import { RefreshTokenRequest } from "../rest-services/user/model/refresh-token.model";
const JWT_PARAM = 'jwt';
const REFRESH_TOKEN_PARAM = 'refresh-token';
interface UserDetails {
sub: string;
@@ -15,8 +18,11 @@ interface UserDetails {
providedIn: 'root'
})
export class AuthenticationService {
authenticate(token: string): void {
private userRestService = inject(UserRestService);
authenticate(token: string, refreshToken: string): void {
localStorage.setItem(JWT_PARAM, token);
localStorage.setItem(REFRESH_TOKEN_PARAM, refreshToken);
}
unauthenticate(): void {
@@ -44,6 +50,34 @@ export class AuthenticationService {
return localStorage.getItem(JWT_PARAM) ?? undefined;
}
isTokenExpired(): boolean {
let result = false;
const userDetails = this.extractUserDetails();
if (userDetails) {
const expirationDate = new Date(userDetails.exp * 1000);
const now = new Date();
result = expirationDate < now;
}
return result;
}
renewToken(): void {
const refreshToken = localStorage.getItem(REFRESH_TOKEN_PARAM);
if (refreshToken) {
const request: RefreshTokenRequest = {
refreshTokenValue: refreshToken
};
this.userRestService.refreshToken(request)
.then(refreshTokenResponse => {
this.authenticate(refreshTokenResponse.accessToken, refreshTokenResponse.refreshToken);
});
}
}
private extractUserFromLocalStorage(): User | undefined {
let result: User | undefined = undefined;