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([]);
|
||||
});
|
||||
|
||||
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)', () => {
|
||||
const url = `${environment.apiUrl}/auth/login`;
|
||||
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 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 token = authService.getToken();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user