57 votes

angulaire 2 http withCredentials

J'essaie d'utiliser withCredentials pour envoyer un cookie à mon service, mais je ne sais pas comment le mettre en œuvre. Les documents disent "Si le serveur nécessite des informations d'identification d'utilisateur, nous les activerons dans les en-têtes de demande" Sans aucun exemple. J'ai essayé plusieurs manières différentes mais il n'enverra toujours pas mon cookie. Voici mon code jusqu'à présent.

 private systemConnect(token) {
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    headers.append('X-CSRF-Token', token.token);
    let options = new RequestOptions({ headers: headers });
    this.http.post(this.connectUrl, { withCredentials: true }, options).map(res => res.json())
    .subscribe(uid => {
        console.log(uid);
    });
}
 

66voto

Oleg Barinov Points 1242

Essayez de changer votre code comme ceci

let options = new RequestOptions({ headers: headers, withCredentials: true });

et

this.http.post(this.connectUrl, <stringified_data> , options)...

comme vous le voyez, le deuxième paramètre doit être les données à envoyer (en utilisant JSON.stringify ou seulement '' ) et toutes les options dans un troisième paramètre.

30voto

Alexei Points 3124

À partir d'Angular 4.3, HttpClient et Interceptors ont été introduits.

Un exemple rapide est illustré ci-dessous:

 @Injectable()
export class WithCredentialsInterceptor implements HttpInterceptor {

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        request = request.clone({
            withCredentials: true
        });

        return next.handle(request);
    }
}

constructor(
      private http: HttpClient) {

this.http.get<WeatherForecast[]>('api/SampleData/WeatherForecasts')
    .subscribe(result => {
        this.forecasts = result;
    },
    error => {
        console.error(error);
    });
 

9voto

James Poulose Points 350

Créer un Interceptor serait une bonne idée d'injecter des éléments dans l'en-tête de l'application. D'un autre côté, si vous recherchez une solution rapide qui doit être effectuée au niveau de chaque demande, essayez de définir withCredentials à true comme ci-dessous

 const requestOptions = {
 headers: new HttpHeaders({
  'Authorization': "my-request-token"
 }),
 withCredentials: true
};
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X