Ich habe dieses Problem, bei dem eine Sitzung erstellt wird, unabhängig davon, ob der Benutzer angemeldet ist oder nicht.Wie gebe ich die Sitzung nur wenn authentifiziert? Jede andere Middleware-Bestellung funktioniert nicht
Ich möchte es, wenn eine Sitzung nur erstellt wird, wenn der Benutzer erfolgreich anmeldet. Andernfalls, wenn ein Selen-Bot trifft ... zum Beispiel würde die Route route('/users/:username')
meine Sitzung Sammlung mit Sitzungen füllen, die nicht von echten Benutzern sind. Ich lasse meine Benutzer für immer angemeldet bleiben, so dass der Sitzungscookie auf ein Jahr eingestellt ist ... was noch schlimmer ist, wenn die Sitzung nicht zu einem echten Benutzer gehört.
Wie kann ich eine Sitzung nur dann an den Client zurückgeben, wenn die Authentifizierung erfolgreich war? Ich habe verschiedene Reihenfolge der Routen und Middleware versucht, aber das ist die einzige Reihenfolge, die richtig funktioniert.
app.use(session({
secret: 'bob',
saveUninitialized: true,
resave: true,
name: 'curves',
cookie: { secure: false, httpOnly: false,
maxAge: 365 * 24 * 60 * 60 * 1000 },
store: new MongoStore(storeOptions)
}));
app.use(passport.initialize());
app.use(passport.session());
app.use('/', auth);
app.use('/api/v1', router);
// isLoggedIn WOULD NOT WORK IF I PLACED THIS BEFORE PASSPORT/SESSION MIDDLEWARE
router.route('/users/:username')
.get(isLoggedIn, api.getUsername);
auth.route('/auth/facebook')
.get(passport.authenticate('facebook', { scope : 'email' }));
auth.route('/auth/facebook/callback')
.get(function(req, res, next) {
passport.authenticate('facebook', function(err, userDoc, info) {
if (err) { return next(err); }
// I don't think !userDoc will ever happen because of mongo upsert
if (!userDoc) { return res.redirect('/login'); }
req.logIn(userDoc, function(err) {
if (err) { return next(err); }
return res.redirect('http://localhost:9000/users');
});
})(req, res, next);
});
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.status(404).json({ error: "not logged in" });
}