fix: Bearer non ajouté aux appels API depuis le passage de apiUrl à /api
Régression introduite par le passage du front en apiUrl relatif (/api,
proxy dev) : l'auth.interceptor testait req.url.startsWith('/api'), or au
moment de l'intercepteur l'URL est déjà résolue en absolu
(http://localhost:4200/api/...), donc le test échouait et le token JWT
n'était plus envoyé. Conséquence : 401 sur les appels API (ajout de
trajet impossible, popup restant ouverte).
Correction : détection de l'API alignée sur le timeoutInterceptor
(startsWith(apiUrl) || includes('/api/')). Test unitaire ajouté couvrant
le cas d'une URL d'API absolue.
This commit is contained in:
@@ -68,6 +68,18 @@ describe('authInterceptor', () => {
|
|||||||
req.flush([]);
|
req.flush([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('ajoute le Bearer même quand l URL de l API est absolue (apiUrl relatif /api résolu sur l origine)', () => {
|
||||||
|
// En dev, apiUrl = '/api' : au moment de l intercepteur, l URL est déjà résolue
|
||||||
|
// en absolu par rapport à l origine (ex. http://localhost:4200/api/...). Le Bearer
|
||||||
|
// doit tout de même être ajouté (régression corrigée via le test includes('/api/')).
|
||||||
|
const url = 'http://localhost:4200/api/trajets';
|
||||||
|
http.get(url).subscribe();
|
||||||
|
|
||||||
|
const req = httpMock.expectOne(url);
|
||||||
|
expect(req.request.headers.get('Authorization')).toBe('Bearer jwt-abc');
|
||||||
|
req.flush([]);
|
||||||
|
});
|
||||||
|
|
||||||
it('n ajoute pas le Bearer sur un endpoint public d auth (/auth/login)', () => {
|
it('n ajoute pas le Bearer sur un endpoint public d auth (/auth/login)', () => {
|
||||||
const url = `${environment.apiUrl}/auth/login`;
|
const url = `${environment.apiUrl}/auth/login`;
|
||||||
http.post(url, { email: 'a@b.fr', motDePasse: 'x' }).subscribe();
|
http.post(url, { email: 'a@b.fr', motDePasse: 'x' }).subscribe();
|
||||||
|
|||||||
@@ -35,7 +35,11 @@ export const authInterceptor: HttpInterceptorFn = (req, next) => {
|
|||||||
const authService = inject(AuthService);
|
const authService = inject(AuthService);
|
||||||
const router = inject(Router);
|
const router = inject(Router);
|
||||||
|
|
||||||
const cibleApi = req.url.startsWith(environment.apiUrl);
|
// Détection de l'API robuste au cas où `apiUrl` est relatif (`/api`) : à ce stade
|
||||||
|
// Angular a déjà résolu `req.url` en URL absolue (ex. http://localhost:4200/api/...),
|
||||||
|
// donc un simple `startsWith('/api')` serait faux. On teste aussi la présence du
|
||||||
|
// segment `/api/` dans l'URL, comme le fait le timeoutInterceptor.
|
||||||
|
const cibleApi = req.url.startsWith(environment.apiUrl) || req.url.includes('/api/');
|
||||||
const estEndpointPublic = ENDPOINTS_AUTH_PUBLICS.some((chemin) => req.url.includes(chemin));
|
const estEndpointPublic = ENDPOINTS_AUTH_PUBLICS.some((chemin) => req.url.includes(chemin));
|
||||||
const token = authService.getToken();
|
const token = authService.getToken();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user