Angular 9 - dactylographié - headers.set - ne pas ajouter d'en-tête

Oct 02 2020

J'essaye d'utiliser un injecteur angulaire pour ajouter un jeton porteur

bien que le code soit exécuté, l'en-tête n'est pas ajouté

il existe de nombreux codes différents, j'ai essayé certains d'entre eux, ils mènent tous au même problème

aucun porteur n'est envoyé avec la demande

dans l'image ci-dessous, je me suis arrêté à clone / headers.set , mais même après cette étape, la carte des en-têtes est toujours vide

@Injectable()
export class JwtInterceptor implements HttpInterceptor {
  constructor(
    private appService: AppService
  ) { }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // add auth header with jwt if user is logged in and request is to the api url
    let authentication: Authentication = this.appService.getUserSession();

    const isLoggedIn = authentication && authentication.token;
    const isApiUrl = request.url.startsWith(environment.apiUrl);

    //------------------------------------- add id's
    let body = request.body;
    if(!body)
    {
        body={};
    }
    body['clientId'] = environment.clientId;
    body['clientSecret'] = environment.clientSecret;

    request = request.clone({
        body: body
    });

    //--------------------------------------- add jwt

    if(authentication)
    {
        request = request.clone(
            {
                headers: request.headers.set('Bearer', authentication.token)
            }
        );
    }

    return next.handle(request);
  }
}

merci de m'aider sur celui-ci

Réponses

1 Adjunta Oct 02 2020 at 10:01

Selon le prototype de la méthode clone (), vous avez une propriété d'objet pour définir les en-têtes (nommée setHeaders)

setHeaders?: {
            [name: string]: string | string[];
        };

Vous devriez faire comme suit

 request = request.clone(
         {
            setHeaders: {
                Authorization: `Bearer ${authentication.token}`
            }
         }
    );