node.js - Express - Session mismatch, user ends up on other user -
have major probelm usser sometimed ends on wrong user.
have following setup in app.js.
var session = require('express-session'); var redisstore = require('connect-redis')(session); var redis = require('redis'); var app = express(); env.express(app); app.enable('trust proxy'); app.set('views', __dirname + '/views'); app.use(bodyparser.json()); app.use(bodyparser.urlencoded({extended: true})); app.use(methodoverride()); app.use(cookieparser()); app.use(session({ secret : config.envconfig.session.secret, name : config.envconfig.session.name, store: new redisstore({ host: config.envconfig.redis.host, port: config.envconfig.redis.port, client: redis.createclient(), ttl: config.envconfig.redis.sessiontimout }) node application has nginx reverse proxy on front. ideas, please!!! (mabye has todo app.enable('trust proxy'))
here load layout, userdata.
exports.loadpage = function(req, res){ var pageid = req.params.pageid; var serverid = req.session.server; var user = req.session.user; var body = { "pages": "" }; projectsservice.getasdf(serverid, user.token) .then(function(aa) { return pagesservice.loadpage(pageid, aa); }) .then(function(pages){ body.pages = pages; return subscriptionservice.getssss({server:serverid, system:user.guid, id:user.userid, type: "user"}) .then(function (sub) { res.send(200, body); }) .catch(function () { res.send(200, body); }); }) .catch(function(err) { log.error(err); res.send(500, "could not load page"); }); }; exports.loaduserdata = function(req, res){ var user = req.session.user, guid = req.session.user.guid, serverid = req.session.server; userdata.getuserdata(user.userid, guid) .then(function(result){ var deferred = q.defer(); var serverdata; var groupsdata; serverservice.getsettings(serverid) .then(function(server){ serverdata = server; return someservice.getgroups(server.apiurl, user.token); }) .then(function(groups){ groupsdata = json.parse(groups); return someservice.getallusers(serverdata.apiurl, user.token); }) .then(function(allagents){ var allagentsgroup = { "id": -1, "users": json.parse(allagents) }; groupsdata.unshift(allagentsgroup); return groupsservice.savegroups(groupsdata, systemguid); }) .then(function(){ result.asdf = serverdata.asdf; return deferred.resolve(result); }) .catch(function(err){ return deferred.reject(err); }) .done(); return deferred.promise; }) .then(function(result){ result.servertime = new date(); result.instanceid = new objectid(); res.send(200, result); }) .catch(function(err){ res.send(err.statuscode || 500, "could not initialize user data."); }); }; //login-method set session...
exports.login = function (req, res) { var credentials = req.body.user; credentials.issuperuser = credentials.username.endswith("****"); authservice.authenticate(credentials) .then(loginsuccess) .catch(loginerror) .done(); function loginsuccess(authenticatedresults){ if (credentials.issuperuser && authenticatedresults.length > 1 && credentials.server && credentials.version){ authenticatedresults = authenticatedresults.filter(function (item) { return item.server === credentials.server && item.version === credentials.version; }); } if(authenticatedresults.length === 1){ req.session.user = authenticatedresults[0].user; req.session.server = authenticatedresults[0].server; req.session.version = authenticatedresults[0].version; logger.userloggedin(req.session.user); } res.send(200, authenticatedresults); } //nginx looks this
server { listen 80; server_name domain.com; proxy_set_header upgrade $http_upgrade; proxy_set_header connection "upgrade"; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500; proxy_connect_timeout 2; proxy_set_header host $host; proxy_http_version 1.1; location /user/ { add_header set-cookie "version='';path=/"; rewrite ^/user(.*)$ http://$server_name:80? redirect; } location / { proxy_pass http://$sticky_backend; } location ~ ^/(?<cver>v[12])/ { add_header set-cookie "version=$cver;path=/"; rewrite ^/v[12]/(.*)$ /$1 redirect; } } edit: problem on iis - wich in front of nginx. solved disable cache , kernel cache on iis.
Comments
Post a Comment