Ich habe ein Problem beim Laden von Sitzungen mit passJS. Irgendwie ist bei jeder Anfrage eine neue Sitzung anzutreffen. Die SerializeUser-Funktion kann die vorhandene Sitzung nicht finden und erstellt jedes Mal eine neue Sitzung. Wie kann ich das wissen?
1. Die mysessions
Tabelle in Mongodb. Für jede Anfrage werden zwei Einträge in der Tabelle angelegt. Welche sehen in etwa so aus.PassportJS: Sitzungen funktionieren nicht wie erwartet
{
"_id" : "U_MhBL17rMVdFbuXt7Y5RGjZeHR5mP7O",
"session" : {
"cookie" : {
"originalMaxAge" : 2419200000,
"expires" : ISODate("2016-06-14T14:32:30.721Z"),
"secure" : null,
"httpOnly" : true,
"domain" : null,
"path" : "/"
},
"passport" : {
}
},
"expires" : ISODate("2016-06-14T14:32:30.721Z")
}
{
"_id" : "fSfITl6hGLdvny1PVZ3iJ6_dFzTmNJj3",
"session" : {
"cookie" : {
"originalMaxAge" : 2419200000,
"expires" : ISODate("2016-06-14T14:32:30.808Z"),
"secure" : null,
"httpOnly" : true,
"domain" : null,
"path" : "/"
},
"passport" : {
"user" : "573b11e32147fec27aa9534e"
}
},
"expires" : ISODate("2016-06-14T14:32:30.808Z")
}
- Deserialize Benutzer nie aufgerufen.
Aber ich verstehe nicht, warum es nicht heißt. Ich habe gesehen und this, aber ich denke, ich habe alles aussortiert.
Hier ist meine environment.js
var MongoDBStore = require('connect-mongodb-session')(session);
var sessionStore = new MongoDBStore({
uri: "mongodb://localhost:27017/metaiotAdmin", // Development mode
collection: 'mysessions'
});
sessionStore.on('error', function(error) {
assert.ifError(error);
assert.ok(false);
});
/*session options to be given to express. It's really express keeping the sessions and not passport*/
var sessionOpts = {
saveUninitialized: true,
resave: false,
store: sessionStore,
secret: "cat at my keyboard",
cookie: {
httpOnly: true,
maxAge: 2419200000
}
};
/*declaring all my global variables and dependencies*/
app.use(cookieParser("cat at my keyboard")); // Secret should be kept in a config file and the folder should be added in gitignore
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.text({
type: "text/plain"
}));
app.use(session(sessionOpts));
app.use(passport.initialize());
app.use(passport.session());
Mein login.js
passport.serializeUser(function(user, done) {
console.log("Serialize", user.id);
done(null, user.id);
});
passport.deserializeUser(function(_id, done) {
console.log("deserializeUser");
Users.findById(_id, function(err, user) {
console.log(err);
done(err, user);
});
});
passport.use('local-login', new LocalStrategy({
passReqToCallback: true
}, function(req, username, password, done) {
Users.findOne({
'emailId': username
}, function(err, user) {
if (err)
return done(err);
if (!user) {
return done(null, false, {
message: 'Username does not exist'
});
} else if (password === user.password) {
console.log("User is verified");
req.session.save();
return done(null, user);
} else
return done(null, false, {
message: "Password does not match"
});
});
}));
app.post('/auth/login', passport.authenticate('local-login'), function(req, res, next) {
res.sendStatus(200);
});
Datei kann ich nichts schrecklich falsch sehen. Hilfe wird geschätzt.