Я сделал базовый веб-сайт с nodejs и экспрессом, которому нужна система сеансов, поэтому для этого я использовал экспресс-сеанс. Проблема в том, что мой сеанс не сохраняется на разных страницах моего веб-сайта, похоже, что req.session удаляется напрямую после входа в систему. Вот мой код (только важные части):
var express = require('express');
var consolidate = require('consolidate');
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
var bodyparser = require('body-parser');
var session = require('express-session');
//var MongoStore = require('connect-mongo')(session);
var app = express();
app.engine('html', consolidate.swig);
app.set('view engine', 'html');
app.use(express.static(__dirname + '/views'));
app.use(bodyparser.json());
app.use(bodyparser.urlencoded({extended:true}));
app.use(session({
secret: "stfkjvctygf",
resave : false,
saveUninitialized : true,
cookie: { secure: false, maxAge: 1800000 }
}));
app.post('/login',function(req,res,next){
MongoClient.connect(url, function(err, db){
if(err) throw err;
var dbo=db.db("testdb");
var user=dbo.collection("login").findOne({userid : req.body.userid, pwd : req.body.pwd}, function(err, user){
if(err) throw err;
if (user) {
req.session.user = user;
req.session.save(function() {
console.log("current user session: "+req.session.user.userid);
res.render('mainpage.html', {userid: req.session.user.userid});
});
}
else {
console.log("connection failed");
res.render('login.html', {error: 'Invalid username or password'});
}
db.close();
});
});
});
app.get('/mainpage', function(req,res,next) {
if (req.session.user) {
res.render('mainpage.html', {userid: req.session.user.userid});
}
else {
return res.status(401).send();
}
});
app.get('/profilpage', function(req,res,next){
res.render('profilpage.html', {userid: req.session.user.userid});
});
app.listen(8080);
Таким образом, когда пользователь входит в систему успешно, mainpage.html отображается правильно (поле userid является правильным полем с req.session.user.userid), но когда я нажимаю на другую страницу, такую как профильная страница, или если я возвращаюсь к mainpage, сессия не сохраняется, а поле userid неверно. Я также хочу отметить, что предложение if (req.session.user) в /mainpage не работает, а else, кажется, никогда не используется.
(база данных mongodb и файлы html верны)
Спасибо.
var user=
вvar user = dbo.collection().findOne()
. Это неправильно и вводит в заблуждение. Вероятно, это не является причиной вашей проблемы, но определенно неправильно. - person jfriend00   schedule 14.04.2018