2017-04-13 5 views
4

Ich bin neu bei angular2. Mein Server (Spring) antwortet auf die Authentifizierung mit einem Set-Cookie-Wert in seinen Antwortheadern.Cookie in Anfragesköpfen setzen Angular2

Wie setze ich den Cookie auf die Request-Header für die nächsten API-Aufrufe?

Ich suchte viel, aber ich kann keine passende Lösung finden.

+2

Cookies werden automatisch auf Anfragen angehängt. Warum willst du es auch zu den Headern hinzufügen? –

+0

@ JánHalaša Ich war auch nicht sehr klar in diesem Teil der Frage. Ich denke, dass es hier etwas Verwirrung darüber gibt, was die Header machen und was die Cookies machen. – Askanison4

Antwort

2

Cookies werden automatisch an jeden Anruf machen, nachdem es mich für Ihre Domain gespeichert. Sie tun etwas anderes falsch. Falls Sie zur Befestigung Auth Daten automatischen Mechanismus zu schaffen, Anrufe REST, zu diesem Tutorial refere, die benutzerdefinierte HttpInterceptor erstellt:

https://medium.com/aviabird/http-interceptor-angular2-way-e57dc2842462

+0

Eigentlich habe ich alles richtig verfolgt und ich habe alles versucht ..aber keine Verwendung. angular2 speichert standardmäßig kein Cookie –

+0

Es ist nicht Angulars Aufgabe, Cookies zu speichern, Browser tut das für Sie. Aber seltsam, dass es das nicht macht. Dann verwenden Sie dies für die Cookie-Verwaltung https://github.com/BCJTI/ng2-cookies/blob/master/README.MD –

+0

@SibiRaj Cookies nichts mit Angular zu tun haben - der Server sendet sie mit einer Anfrage und jeder nachfolgenden Anfrage zurück zu diesem Server wird sie wieder senden. Sie sollten sich ansehen, was tatsächlich mit Ihren Cookies passiert - Cookies sind der richtige Weg, um das zu tun, wonach Sie suchen. Header werden funktionieren, aber es wird nicht empfohlen. – Askanison4

5

Im Rahmen der http.get() or http.post() Methoden können Sie das angeben RequestOptionsArgs

Verwenden Sie die Headers im RequestOptionsArgs den Auth-Header angeben, die Sie benötigen.

Als grobes Beispiel siehe unten:

class PeopleComponent { 
 
    constructor(http: Http) { 
 
    let customHeaders: Headers = new Headers(); 
 
    customHeaders.append('myHeaderName', 'myHeaderValue'); 
 
    
 
    http.get('http://my.web/service', { headers: customHeaders }) \t 
 
     .map(res => res.json()) 
 
     .subscribe(people => this.people = people); 
 
    } 
 
}

+0

können Sie mir zeigen, wie man das implementiert –

+0

Ich habe ein Codebeispiel hinzugefügt, aber ich würde empfehlen zu untersuchen, ob Sie wirklich etwas mit den Headern tun müssen - wie von anderen erwähnt, die Cookies werden normalerweise automatisch an den Server zurückgesendet mit jeder Anfrage, also sollten Sie in der Lage sein, sie Server-Seite zu überprüfen – Askanison4

0

Im Falle eines CORS Szenario müssen Sie die withCredentials Objekt hinzufügen in den RequestOptions auf true. Im Folgenden ist ein Ausschnitt auf, wie ich in meinem HTTP Helfer implementiert haben:

get(resource: string) { 
 
    return this.http.get(`/api/${resource}`, this.getRequestOptions()) 
 
    .map(result => result.json()) 
 
    .catch(e => e.status === 401 ? Observable.throw('Unauthorized') : e.json()); 
 
} 
 

 
post(resource: string, body: any) { 
 
    return this.http.post(`/api/${resource}`, body, this.getRequestOptions()) 
 
    .map(result => result.json()) 
 
    .catch(e => e.status === 401 ? Observable.throw('Unauthorized') : e.json()); 
 
} 
 

 
private getRequestOptions() { 
 
    const headers = new Headers({ 
 
    'Content-Type': 'application/json', 
 
    }); 
 

 
    return new RequestOptions({headers: headers, withCredentials: true}); 
 
}

+0

danke. jetzt mit der neuesten eckigen Version. es funktioniert sogar ohne 'withCredentials' gesetzt, standardmäßig ist es auf wahr gesetzt. keine Notwendigkeit, es zu definieren. –