Weiterleitung zur vorherigen Seite nach Authentifizierung in node.js mit passport.js

Ich versuche, einen Anmeldemechanismus mit node.js, express und passport.js einzurichten. Das Login selbst funktioniert ganz gut, auch Sitzungen werden mit redis schön gespeichert, aber ich habe einige Probleme damit, den Benutzer dorthin umzuleiten, wo er angefangen hat, bevor er zur Authentifizierung aufgefordert wurde.

z.B. Benutzer folgt Linkhttp://localhost:3000/hidden wird dann weitergeleitet zuhttp://localhost:3000/login aber dann möchte ich, dass er wieder zurück zu umgeleitet wirdhttp://localhost:3000/hidden.

Wenn der Benutzer willkürlich auf eine Seite zugreift, auf die er zuerst eingeloggt werden muss, wird er mit seinen Anmeldeinformationen auf die / login-Site umgeleitet und anschließend auf die Site zurückgeleitet, 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');
}

was hakt in die/hidden Seite

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>

Antworten auf die Frage(7)

Ihre Antwort auf die Frage