web-dev-qa-db-fra.com

Définir le cookie dans les en-têtes de demande Angular2

Je suis nouveau sur angular2. Mon serveur (printemps) répond à l'authentification avec une valeur set-cookie dans ses en-têtes de réponse.

Comment définir ce cookie sur les en-têtes de demande pour les prochains appels d'API?

J'ai beaucoup cherché, mais je ne trouve pas de solution appropriée.

10
Sibiraj

Des cookies sont automatiquement associés à chaque appel que vous effectuez après l'avoir enregistré pour votre domaine. Vous faites autre chose de mal. Dans le cas où vous souhaitez créer un mécanisme automatique pour attacher des données d'authentification aux appels REST, reportez-vous à ce tutoriel qui crée un HttpInterceptor personnalisé:

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

4
Mario Petrovic

Dans le cadre des méthodes http.get() ou http.post() , vous pouvez spécifier les méthodes RequestOptionsArgs

Utilisez le Headers dans le RequestOptionsArgs pour spécifier l'en-tête d'authentification dont vous avez besoin.

À titre d'exemple, voir ci-dessous:

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

Dans le cas d'un scénario CORS, vous devrez ajouter la propriété withCredentials définie sur true dans RequestOptions. Voici un extrait de la façon dont j'ai implémenté mon aide HTTP:

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});
}
1
jberndsen