2016-02-24 14 views

risposta

38

Immagino che ci sia una fase in cui chiedi al server di autenticarti. Seguendo questo (e se l'autenticazione ha esito positivo), il server restituirà un cookie nella risposta. Il browser memorizzerà questo cookie e lo invierà di nuovo per ogni chiamata.

Detto questo, nel caso di richieste cross domain (CORS), è necessario impostare lo withCredentials di XHR su true per consentire ai browser di aggiungere cookie nelle richieste.

Per abilitare questo con Angular2, abbiamo bisogno di estendere la classe BrowserXhr come descritto di seguito:

@Injectable() 
export class CustomBrowserXhr extends BrowserXhr { 
    constructor() {} 
    build(): any { 
    let xhr = super.build(); 
    xhr.withCredentials = true; 
    return <any>(xhr); 
    } 
} 

e sovrascrivere il provider BrowserXhr con l'estesa:

bootstrap(AppComponent, [ 
    HTTP_PROVIDERS, 
    provide(BrowserXhr, { useClass: CustomBrowserXhr }) 
]); 

Vedi questa domanda per maggiori dettagli :

Edit (seguente commento s la freaker')

Da RC2, è possibile utilizzare la proprietà withCredentials direttamente all'interno della configurazione richiesta, come descritto di seguito:

this.http.get('http://...', { withCredentials: true }) 

Modifica (seguendo il [maxou commento)

Ricordarsi di includere conCredentials: true su ogni richiesta.

+16

Questa funzione è stata aggiunta a angular2 ora. Ora puoi semplicemente fare qualcosa come 'http.get (url, {withCredentials: true})' quindi questa comoda soluzione non è più necessaria (a partire da 2.0.0-rc4 o precedenti). – freaker

+2

Sì, hai ragione. Sono stato aggiunto in RC2. Ho aggiornato la mia risposta di conseguenza. Grazie mille per averlo fatto notare ;-) –

+4

mi sembra che usando 'withCredentials', il' Set-Cookie' nella risposta sarà impostato dal client, ma il client non invia ancora 'Cookie' in la richiesta (che è stata impostata con una richiesta precedente) – maxbellec

Problemi correlati