2016-01-26 6 views
5

Sto tentando di accedere a un sistema. In angolare 1, c'era modi per impostareangular2 xhrfields concredentials true

withCredentials:true 

ma non riuscivo a trovare una soluzione di lavoro in angular2

export class LoginComponent { 
    constructor(public _router: Router, public http: Http,) { 

    } 


    onSubmit(event,username,password) { 
     this.creds = {'Email': '[email protected]','Password': '01010','RememberMe': true} 
     this.headers = new Headers(); 
     this.headers.append('Content-Type', 'application/json'); 

     this.http.post('http://xyz/api/Users/Login', {}, this.creds) 
       .subscribe(res => { 
        console.log(res.json().results); 

       }); 
    } 

} 

risposta

5

per quanto ne so, in questo momento (beta.1) l'opzione non è disponibile.

si deve lavorare intorno ad esso con qualcosa di simile:

let _build = http._backend._browserXHR.build; 

http._backend._browserXHR.build =() => { 
    let _xhr = _build(); 
    _xhr.withCredentials = true; 
    return _xhr; 
}; 
+0

questo funziona in Chrome e Firefox ma il safari fallisce. qualche idea? – harikrish

+0

Non particolarmente per questo, ma ci sono ancora alcuni problemi con Safari (come l'API di internazionalizzazione) con la versione beta corrente (beta.7). – cexbrayat

+0

Potete fatemi sapere cosa intestazioni si sta inviando wih l'API del questo è ciò che io mando intestazioni = { intestazioni: nuove intestazioni ({ 'Accetta': 'application/json', 'Content-Type': 'application/json' }) }; – harikrish

0

penso che non si utilizza il post metrhod nel modo giusto. Si può provare qualcosa del genere:

onSubmit(event,username,password) { 
    this.creds = { 
    'Email': '[email protected]', 
    'Password': '01010','RememberMe': true 
    } 

    this.headers = new Headers(); 
    this.headers.append('Content-Type', 'application/json'); 

    this.http.post('http://xyz/api/Users/Login', 
       JSON.stringify(this.creds), 
       { headers: headers }); 
} 

Si invertono i parametri. Il secondo parametro corrisponde al contenuto da inviare al POST e deve essere definito come stringa. Gli oggetti non sono ancora supportati a questo livello. Vedi questo numero: https://github.com/angular/angular/issues/6538.

Se si desidera impostare intestazioni specifiche, è necessario aggiungere l'oggetto Headers all'interno del terzo parametro del metodo post.

In caso contrario, penso che la proprietà withCredentials sia correlata a CORS se si desidera inviare cookie all'interno di richieste interdominio. Si può avere uno sguardo a questo link per maggiori informazioni:

Spero che ti aiuta, Thierry

2

Questo problema è stato notato da la squadra angular2.

È possibile trovare alcuni altri metodi (uno specialmente scritto come @Iniztable) dopo lo issue link.

+0

il link non valido – Azarus

+0

Era valido ... beh, è ​​il ciclo di vita di un collegamento :( – grebett

+0

ho letto da qualche parte che non è una buona idea postare casualmente link su anwswers poiché potrebbero essere andati via nel tempo. ma copiare incollando il contenuto del significato dovrebbe essere fatto almeno :) – Azarus

1

Se qualcuno sta usando JS pianura, in base alla risposta del cexbrayat:

app.Service = ng.core 
    .Class({ 
     constructor: [ng.http.Http, function(Http) { 
      this.http = Http; 
      var _build = this.http._backend._browserXHR.build; 
      this.http._backend._browserXHR.build = function() { 
       var _xhr = _build(); 
       _xhr.withCredentials = true; 
       return _xhr; 
      }; 
     }], 
8

In angolare> 2.0.0 (e in realtà da RC2 via), basta

http.get('http://my.domain.com/request', { withCredentials: true }) 
+0

Ho passato molto tempo a cercarlo ... grazie. – ARM

+0

Allo stesso modo ho passato una notevole quantità di tempo cercando di risolvere questo problema. Uno dei problemi che avevo era che non sapevo veramente quale fosse il problema (o ci volle un po 'per rintracciarlo almeno). Tutto quello che ho visto è che stavo ottenendo una risposta 401 a una richiesta apparentemente perfetta. –