Je travaille sur un système de connexion simple, mais il semble que la session ne soit pas enregistrée.
J’ai créé un code simple pour les tests. Quelqu’un peut-il me dire ce qui ne va pas? Je suis en train de me connecter et après cela, je lance is_logged mais je ne suis jamais connecté et les deux sessions ne sont pas définies
var port = process.env.PORT || 8080; var express = require('express'); var app = express(); var cookieParser = require('cookie-parser'); var session = require('express-session'); app.use(cookieParser()); app.use(session({ secret: "fd34s@!@dfa453f3DF#$D&W", resave: false, saveUninitialized: true, cookie: { secure: true } })); app.post('/test_login', function(req, res){ req.session.users_schema = 1; req.session.user_doc = 2; res.json({"first": req.session.users_schema, "second": req.session.user_doc}); }); app.post('/test_is_loggin', function(req, res){ if( !req.session.users_schema || !req.session.user_doc ) { console.log("no"); res.json({"first": 1, "second": 1}); } else { console.log("no2"); res.json({"first": req.session.users_schema, "second": req.session.user_doc}); } }); app.listen(port); console.log('Listening on port ' + port);
C’est à cause de l’option cookie.secure = true
citation
Veuillez noter que secure: true est une option recommandée. Cependant, il nécessite un site Web compatible https, c.-à-d. Que HTTPS est nécessaire pour les cookies sécurisés.
voir https://github.com/expressjs/session#cookie-options
Vous devez le définir sur false pour autoriser les cookies de session sur un hôte non https ou utiliser un hôte https.
code de test
var port = process.env.PORT || 8080; var express = require('express'); var app = express(); var cookieParser = require('cookie-parser'); var session = require('express-session'); app.use(cookieParser()); app.use(session({ secret: "fd34s@!@dfa453f3DF#$D&W", resave: false, saveUninitialized: true, cookie: { secure: !true } })); app.get('/test_login', function(req, res){ req.session.users_schema = 1; req.session.user_doc = 2; res.json({"first": req.session.users_schema, "second": req.session.user_doc}); }); app.get('/test_is_loggin', function(req, res){ if( !req.session.users_schema || !req.session.user_doc ) { console.log("no"); res.json({"first": 1, "second": 1}); } else { console.log("OK"); res.json({"first": req.session.users_schema, "second": req.session.user_doc}); } }); app.listen(port); console.log('Listening on port ' + port);
sortie
[mh-cbon@pc15 test] $ node express-session.js Listening on port 8080 OK
Je ne suis pas sûr, mais cela pourrait être lié à la façon dont j’envoie les données?
=========================================
RESOLU !!!
il était lié à la façon dont j’envoie mes données, je l’ai modifié comme suit:
CLIENT:
$.ajax({ type : "POST", xhrFields: {withCredentials: true}, // ADDED THIS LINE url : '//localhost:8080/test_login', data : { }, success : function(data) { console.log(data); }, error : function(req, errortype) { console.log("ERROR"); } });
SERVEUR:
app.use(function(req, res, next) { res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header("Access-Control-Allow-Origin", "http://localhost"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); });
Merci beaucoup @ mh-cbon