Skip to content

Commit ca58831

Browse files
committed
fix routes 23
1 parent c3e2f3f commit ca58831

File tree

4 files changed

+90
-13
lines changed

4 files changed

+90
-13
lines changed

frontend/ultima-ng-19.0.0/src/app/interceptors/token.interceptor.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const TokenInterceptor: HttpInterceptorFn = (request: HttpRequest<unknown
1818
// Get token from storage service
1919
const token = storage.get(Key.TOKEN);
2020

21-
// Add token to request
21+
// Add token to request ONLY if token exists and is valid
2222
const authRequest = addAuthorizationTokenHeader(request, token);
2323

2424
return next(authRequest).pipe(
@@ -42,10 +42,15 @@ function handleAuthFailure(storage: StorageService, router: Router): void {
4242
// Clear tokens and redirect to login
4343
storage.remove(Key.TOKEN);
4444
storage.remove(Key.REFRESH_TOKEN);
45-
router.navigate(['/login']);
45+
router.navigate(['/']); // Redirection vers la page d'accueil
4646
}
4747

48-
function addAuthorizationTokenHeader(request: HttpRequest<unknown>, token: string): HttpRequest<unknown> {
48+
function addAuthorizationTokenHeader(request: HttpRequest<unknown>, token: any): HttpRequest<unknown> {
49+
// CORRECTION : Vérifier si le token existe ET n'est pas vide
50+
if (!token || token === '' || token === 'null' || token === 'undefined') {
51+
return request; // Retourner la requête sans modification
52+
}
53+
4954
return request.clone({
5055
setHeaders: { Authorization: `Bearer ${token}` }
5156
});

frontend/ultima-ng-19.0.0/src/app/pages/home/home.component.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,15 @@ export class HomeComponent {
8989
.subscribe({
9090
next: (response: IAuthentication) => {
9191
console.log('Authentication successful:', response);
92+
// CRITIQUE : Sauvegarder d'abord le token
9293
this.saveToken(response);
93-
this.isAuthenticatedAndRedirecting.set(true);
94-
const redirectUrl = this.storage.getRedirectUrl() || '/dashboards';
95-
this.router.navigate([redirectUrl]);
94+
95+
// Petit délai pour s'assurer que le token est bien sauvegardé
96+
setTimeout(() => {
97+
this.isAuthenticatedAndRedirecting.set(true);
98+
const redirectUrl = this.storage.getRedirectUrl() || '/dashboards';
99+
this.router.navigate([redirectUrl]);
100+
}, 100);
96101
},
97102
error: (error) => {
98103
console.error('Authentication error:', error);
@@ -118,10 +123,17 @@ export class HomeComponent {
118123
});
119124

120125
private saveToken = (response: IAuthentication) => {
126+
console.log('💾 Sauvegarde des tokens:');
127+
console.log('Access Token:', response.access_token?.substring(0, 50) + '...');
128+
console.log('Refresh Token:', response.refresh_token?.substring(0, 50) + '...');
129+
121130
this.storage.set(Key.TOKEN, response.access_token);
122131
this.storage.set(Key.REFRESH_TOKEN, response.refresh_token || response.access_token);
123-
};
124132

133+
// Vérification immédiate
134+
const savedToken = this.storage.get(Key.TOKEN);
135+
console.log('✅ Token sauvegardé et vérifié:', savedToken ? 'Oui' : 'Non');
136+
};
125137
// Ajoutez les autres méthodes si elles sont utilisées dans le template
126138
demandesItems: MenuItem[] = [
127139
{

frontend/ultima-ng-19.0.0/src/app/service/storage.service.ts

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,43 @@ import { Key } from '@/enum/cache.key';
22
import { Inject, Injectable, InjectionToken } from '@angular/core';
33

44
const CLIENT_STORAGE = new InjectionToken<Storage>('CLIENT_STORAGE', { factory: () => localStorage });
5+
56
@Injectable()
67
export class StorageService {
78
constructor(@Inject(CLIENT_STORAGE) private storage: Storage) {}
89

9-
// we are going to get the storage key
10-
get = (key: string): string => this.storage.getItem(key) || '';
10+
// CORRECTION CRITIQUE : Parse le JSON et retourne null si pas trouvé
11+
get = (key: string): any => {
12+
try {
13+
const item = this.storage.getItem(key);
14+
if (item === null) {
15+
return null; // Clé n'existe pas
16+
}
17+
// Essayer de parser le JSON, sinon retourner la string brute
18+
try {
19+
return JSON.parse(item);
20+
} catch {
21+
return item; // Si ce n'est pas du JSON, retourner la string
22+
}
23+
} catch (error) {
24+
console.error('Erreur lors de la lecture du storage:', error);
25+
return null;
26+
}
27+
};
1128

12-
set = (key: string, value: any) => this.storage.setItem(key, typeof value === 'string' ? value : JSON.stringify(value));
29+
set = (key: string, value: any) => {
30+
try {
31+
const stringValue = typeof value === 'string' ? value : JSON.stringify(value);
32+
this.storage.setItem(key, stringValue);
33+
} catch (error) {
34+
console.error("Erreur lors de l'écriture dans le storage:", error);
35+
}
36+
};
1337

1438
remove = (key: string) => this.storage.removeItem(key);
1539

16-
getRedirectUrl = () => this.get(Key.REDIRECT_URL) || '';
40+
// CORRECTION : Utiliser la nouvelle méthode get
41+
getRedirectUrl = (): string => this.get(Key.REDIRECT_URL) || '';
1742

1843
setRedirectUrl = (redirect_url: string) => this.set(Key.REDIRECT_URL, redirect_url);
1944

frontend/ultima-ng-19.0.0/src/app/service/user.service.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,41 @@ export class UserService {
634634
localStorage.removeItem(Key.REFRESH_TOKEN);
635635
}
636636

637-
isAuthenticated = (): boolean => (this.jwt.decodeToken<string>(this.storage.get(Key.TOKEN)) ? true : false);
638-
isTokenExpired = (): boolean => this.jwt.isTokenExpired(this.storage.get(Key.TOKEN)) || false;
637+
isTokenExpired = (): boolean => {
638+
const token = this.storage.get(Key.TOKEN);
639+
640+
// Si pas de token ou token vide, considérer comme expiré
641+
if (!token || token === '' || token === 'null' || token === 'undefined') {
642+
return true;
643+
}
644+
645+
try {
646+
const result = this.jwt.isTokenExpired(token);
647+
if (result instanceof Promise) {
648+
// If a Promise is returned, consider token as expired (or handle async if needed)
649+
console.warn('isTokenExpired returned a Promise, treating as expired.');
650+
return true;
651+
}
652+
return result;
653+
} catch (error) {
654+
console.error("Erreur lors de la vérification d'expiration du token:", error);
655+
return true; // En cas d'erreur, considérer comme expiré
656+
}
657+
};
658+
659+
isAuthenticated = (): boolean => {
660+
const token = this.storage.get(Key.TOKEN);
661+
662+
// Vérifier si le token existe ET n'est pas expiré
663+
if (!token || token === '' || token === 'null' || token === 'undefined') {
664+
return false;
665+
}
666+
667+
try {
668+
return !this.jwt.isTokenExpired(token);
669+
} catch (error) {
670+
console.error("Erreur lors de la vérification d'authentification:", error);
671+
return false;
672+
}
673+
};
639674
}

0 commit comments

Comments
 (0)