issue is: page content of logged in users mixed up with another logged in user
project attributes: I run project on
aws ec2 instance with nginx as proxy to pm2 started index.js of expressjs website with below library for my project
"aws-ses-mail": "^2.1.1",
"body-parser": "^1.15.2",
"cookie-parser": "^1.4.3",
"ejs": "^1.0.0",
"express": "~4.11.x",
"express-ejs-layouts": "^2.2.0",
"express-session": "^1.14.1",
"kerberos": "~0.0.x",
"mandrill": "^0.1.0",
"moment": "^2.14.1",
"parse": "~1.8.0",
"passport": "^0.3.2",
"passport-parse": "0.0.5",
"underscore": "^1.8.3"
also this code did not solve my problem:
app.disable('view cache');
app.use(function (req, res, next) {
res.removeHeader("X-Powered-By");
res.setHeader('Cache-Control', 'no-cache');
next();
});
with the following index.js code:
var express = require('express');
var cookieParser = require('cookie-parser');
var _ = require('underscore');
var moment = require('moment');
var path = require('path');
var ejs = require('ejs');
var bodyParser = require('body-parser');
var session = require('express-session');
var ParseStrategy = require('passport-parse');
var expressLayouts = require('express-ejs-layouts');
var postActions = require('./post-actions');
var Utility = require('./libs/utilities');
var requireUser = require('./require-user');
var userAgentDetector = require('./user-agent-detector');
var passport = require('passport');
Parse = require('parse/node').Parse;
Parse.initialize("hashcode", "hashcode","hashcode");
Parse.CoreManager.set('SERVER_URL', 'http://localhost:1337/parse');
Parse.CoreManager.set('USE_MASTER_KEY', true);
var app = express();
app.use(bodyParser.json()); // for parsing application/json
app.set('views', __dirname+'/views');
app.set('view engine', 'ejs');
app.use(expressLayouts);
// Serve static assets from the /public folder
app.use('/public', express.static(path.join(__dirname, '/public')));
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true }));
var parseStrategy = new ParseStrategy({parseClient: Parse});
passport.use(parseStrategy);
code continue :
app.use(session({
name: 'session-cookie-id',
secret: 'secret',
saveUninitialized: false,
resave: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
// done(null, user);
done(null, user.getSessionToken());
});
passport.deserializeUser(function(user, done) {
// user.className = "_User";
// user = Parse.Object.fromJSON(user);
// done(null, user);
var sessionToken = user;
var query = new Parse.Query('_Session');
query.equalTo('sessionToken', sessionToken);
query.include('user');
return query.first({useMasterKey: true}).then(function(session) {
user = session.get('user');
if (user) {
done(null, user);
} else {
done();
}
}, function(err) {
done();
});
});
app.use(userAgentDetector);
app.use(postActions);
code continue :
app.locals._ = _;
app.locals.moment = moment;
ejs.filters.videoMessageStr = function(str){
//return some code;
};
ejs.filters.secureImageUrl = function (url) {
return url.replace("http://", "https://s3.amazonaws.com/");
};
ejs.filters.getObjectThumb = function (userObject, params) {
//return some code;
};
ejs.filters.getImageThumb = function (imageObject, params) {
//return some code;
};
app.disable('view cache');
app.use(function (req, res, next) {
res.removeHeader("X-Powered-By");
res.setHeader('Cache-Control', 'no-cache');
next();
});
// Controller code in separate files.
var homeController = require('./controllers/home');
var usersController = require('./controllers/users');
app.get('/', homeController.index);
app.get('/home', homeController.getHomePage);
app.get('/home/page/:page', homeController.getHomePage);
app.get('/messages', requireUser, messagesController.index);
app.get('/login-and-save', usersController.loginAndSave);
code continue :
app.get('/login', usersController.getLogin);
app.post('/login', function(req, res, next){
passport.authenticate('parse',function(err, user, info) {
if (err || !user) {
return res.status(400).json(info);
}
req.logIn(user, function(err) {
if (err) {
return res.status(400).json(err);
}
res.end("ok");
});
})(req, res);
});
app.get('/logout', function(req, res, next){
req.logOut();
res.redirect('/');
});
app.get('*', function(req, res) {
res.render('home/404.ejs', { layout: false, url: req.url });
});
var port = process.env.PORT || 9000;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
console.log('parse-server running on port ' + port + '.');
});
There are several things you need to take into consideration when porting your Cloud Code to parse-server
, especially around authentication . The passport-parse library you're using to handle authentication appears to be written with parse.com apps in mind, and has not been updated in two years as of this writing. I highly suspect that module is depending on the old currentUser
behavior of hosted Parse.com apps.
Take a look at the Parse Server Guide to learn more about what needs to be updated when moving over to parse-server
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.