Ich versuche, einen Anmeldemechanismus mit node.js, express und passport.js einzurichten. Das Login selbst funktioniert ganz gut, auch Sitzungen werden gut mit redis gespeichert, aber ich habe einige Probleme damit, den Benutzer dorthin umzuleiten, wo er angefangen hat, bevor er zur Authentifizierung aufgefordert wird.
zB Benutzer folgt Link http://localhost:3000/hidden
wird dann umgeleitet, http://localhost:3000/login
aber dann möchte ich, dass er wieder zurückgeleitet wird zu http://localhost:3000/hidden
.
Wenn der Benutzer zufällig auf eine Seite zugreift, auf der er zuerst angemeldet sein muss, wird er mit seinen Anmeldeinformationen auf die / login-Site umgeleitet und dann zurück auf die Site umgeleitet, auf die er zuvor versucht hat, zuzugreifen.
Hier ist mein Login-Beitrag
app.post('/login', function (req, res, next) {
passport.authenticate('local', function (err, user, info) {
if (err) {
return next(err)
} else if (!user) {
console.log('message: ' + info.message);
return res.redirect('/login')
} else {
req.logIn(user, function (err) {
if (err) {
return next(err);
}
return next(); // <-? Is this line right?
});
}
})(req, res, next);
});
und hier meine sureAuthenticated Methode
function ensureAuthenticated (req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
}
welches in die /hidden
Seite einhakt
app.get('/hidden', ensureAuthenticated, function(req, res){
res.render('hidden', { title: 'hidden page' });
});
Die HTML-Ausgabe für die Anmeldeseite ist recht einfach
<form method="post" action="/login">
<div id="username">
<label>Username:</label>
<input type="text" value="bob" name="username">
</div>
<div id="password">
<label>Password:</label>
<input type="password" value="secret" name="password">
</div>
<div id="info"></div>
<div id="submit">
<input type="submit" value="submit">
</div>
</form>