wake-up-neo.com

Winkel 7 sendet nicht den richtigen Header auf Anfrage

Ich kann die korrekten Überschriften nicht in Winkel 7 senden. Ich benutze den Pass in meinem Backend:

"app.get('/api/users', passport.authenticate('jwt', {session: false}), (req, res, next) => {... bla bla bla...}."

Wenn ich versuche, ein gültiges Token vom Postboten an meinen Pfad/api/users zu senden, funktioniert alles richtig, aber wenn ich es von Winkel nicht mache. (* Angular zeigt keinen Fehler!) Angenommen, 'Bearer validToken' ist ein gültiges Token.__Auf diese Weise sende ich die Kopfzeilen:

getAll() {

const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Bearer validToke.' 
  });
};

return this.http.get<user[]>(`http://localhost:3000/api/users`, httpOptions);
}

Ich kann mich von eckig authentifizieren und das Trägertoken erhalten. Alles funktioniert korrekt. Ich kann die Liste der Benutzer abrufen, wenn ich passport.authenticate ('jwt', {session: false}) entferne.

Danke fürs Lesen!

4
Augusto

Ich konnte dieses Problem durch Erstellen eines Interceptors lösen: 

import { Injectable } from '@angular/core';
    import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
    import { Observable } from 'rxjs';

    import { AuthenticationService } from '../_services/authentication.service';

    @Injectable()
    export class JwtInterceptor implements HttpInterceptor {
      constructor(private authenticationService: AuthenticationService) {}

      intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        // add authorization header with jwt token if available
        let currentUser = this.authenticationService.currentUserValue;
        if (currentUser && currentUser.token) {
          request = request.clone({
            setHeaders: {
              Authorization: `${currentUser.token}`
            }
          });
        }

        return next.handle(request);
      }
    }

Vielen Dank

1
Augusto

Alles scheint für mich richtig zu sein - aber ich habe ein paar kleine Änderungen in Ihrem Code 

Binden Sie nicht HttpOptions, binden Sie die HttpHeaders direkt in der Anforderung. Überprüfen Sie den folgenden Code

getAll() {

const httpHeaders = new HttpHeaders ({
     'Content-Type': 'application/json',
     'Authorization': 'Bearer validToke.' 
   });

return this.http.get<user[]>(`http://localhost:3000/api/users`, { headers: httpHeaders });
}

Jetzt werden Ihre Header für die Anforderung hinzugefügt. Wenn Sie Daten aus einer anderen Domäne abrufen möchten, versuchen Sie, Kore auf Ihrem Server hinzuzufügen. Der Browser leitet die Anforderung als HttpOptions ab und bindet sie in Ihrem Fall als HttpGet 

Ich hoffe es funktioniert - viel Spaß beim Programmieren !!

2
Rahul