J’ai donc créé un proxy apache pour transférer mon api.example.loc vers localhost: 8080 / api
ServerAdmin [email protected] ServerName api.example.loc ProxyRequests off ProxyPreserveHost On Order deny,allow Allow from all Header set Access-Control-Allow-Origin "*" Order allow,deny Allow from all ProxyPass http://localhost:8080/api/ ProxyPassReverse http://localhost:8080/api/ ProxyPassReverseCookiePath / /
et je vais avoir mon serveur nodejs en cours d’exécution et d’écoute sur le port 8080
var express = require('express'), app = express(), server = require('http').createServer(app), app .use(require('cookie-parser')()) .use(require('express-session')({ secret: 's£cr£+c@d£' })) .get('/api', function(req, res) { var host = req.get('host'); console.log(host); console.log(req.sessionID); }); server.listen(8080);
lorsque vous appelez localhost: 8080 ou api.example.loc tout va bien, je suis en train de recevoir l’hôte api.example.loc && le même ID de session lors de l’actualisation
api.example.loc BWqB8NtZ3beHXZchkxJvwvEB
mais quand j’essaie d’appeler mon api.example.loc depuis un autre domaine, disons api.loc en utilisant ajax
$.ajax({ url: 'http://api.livechat.loc/', crossDomain: true });
J’ai un nouveau sessionID chaque fois que je rafraîchit la page sur api.loc
api.livechat.loc OcIGeviXOmCkBWRELzPqMmVu api.livechat.loc 1yGT3rBaPaf9HCQ5zGd4iUud
J’ai remarqué qu’en appelant api.example.come, un cookie de session est créé sur l’hôte api.example.loc, mais aucun cookie n’est créé s’il est appelé via ajax à partir de api.loc. J’ai donc essayé le suivant, sans meilleurs résultats
... .use(require('express-session')({ secret: 's£cr£+c@d£', cookie: { domain: '.api.loc', path: '/', maxAge: 1000 * 60 * 24 } })) ...
des idées ?
ok j’ai fini en ajoutant withCredentials à mon appel ajax afin que les cookies puissent être configurés entre domaines
$.ajax({ url: 'http://api.livechat.loc/', crossDomain: true, xhrFields: { withCredentials: true } });
et en changeant la section d’emplacement sur ma conf procuration
Header set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE" Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Headers "X-Requested-With" Header set Access-Control-Max-Age "60" Header set Access-Control-Allow-Credentials true Order allow,deny Allow from all ProxyPass http://localhost:8080/api/ ProxyPassReverse http://localhost:8080/api/ ProxyPassReverseCookiePath / /