web-dev-qa-db-fra.com

Le cookie défini dans la réponse n'est pas défini pour la demande de publication Angular2

Lorsque je fais une demande de vente dans Angular2, je reçois le cookie de jeu attendu dans la réponse. Cependant, mon navigateur (essayé à la fois avec Chrome et Firefox) refuse de définir le cookie.

Lorsque j'utilise une application Angular 1 pour appeler le point de terminaison même API, les cookies sont correctement définis.

Les en-têtes de réponse sont:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://example.com
Allow:GET, PUT, HEAD, OPTIONS
Content-Type:application/json
Date:Thu, 28 Jan 2016 14:41:38 GMT
P3P:policyref="http://www.example.com/p3p.xml", CP="NON DSP COR CURa TIA"
Server:WSGIServer/0.1 Python/2.7.6
Set-Cookie:sessionid=994wl49qfsizog5bqmt57sgx9q2toa25; expires=Mon, 28-Mar-2016 14:41:37 GMT; Max-Age=5183999; Path=/
Set-Cookie:csrf=u7UQhpAphTsGYKRU6jFlLFt6NoYAhNMS; Domain=api.example.com; expires=Thu, 26-Jan-2017 14:41:38 GMT; Max-Age=31449600; Path=/
Vary:Accept, Cookie

Le backend est programmé dans Django 1.8.

Est-ce que quelqu'un a vécu la même chose ou a une suggestion pour résoudre ce problème?

12
Bas van Dijk

Il semble que je sois un problème lié à la SCRO. Vous pourriez peut-être essayer de définir l'attribut withCredentials lors de l'exécution de la requête HTTP.

Cette réponse pourrait vous aider à savoir comment faire cela, en particulier la réponse de Cedric Exbrayat :

Modifier

Vous pouvez étendre la BrowserXhr:

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

et remplacez le fournisseur BrowserXhr par le paramètre étendu:

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

Si vous avez besoin de conseils supplémentaires sur la SCRO, vous pouvez consulter ce lien: http://restlet.com/blog/2015/12/15/understanding-and-using-cors/ .

J'espère que ça vous aide, Thierry

12
Thierry Templier

En effet, un problème de la SCRO . Depuis Angular2 RC2, il vous suffit de

this.http.get('http://my.domain.com/request', { withCredentials: true })
20
maxbellec

J'ai eu le même problème, mais pour moi le cookie avait un chemin d'accès vers '/ api/order' .. Donc, seule la demande d'accès à ce chemin contenait le cookie .. J'ai modifié le chemin d'accès vers '/' et maintenant tout va bien ..

1
Simon Ludwig