2016-04-20 4 views
2

Ich habe meine Express-App-Setup mit Passport zur Autorisierung. Wenn sich ein neuer Nutzer anmeldet, möchte ich eine E-Mail-Bestätigung vornehmen. Nachdem der Benutzer Anmeldeinformationen gesendet hat, erhält die Route/signup route die Anforderung und leitet sie erfolgreich zur Überprüfung an/sendmail weiter.Wie behandelt man abgelaufene Routen/Sitzungen in Express?

app.post('/signup', passport.authenticate('local-signup', { 
    successRedirect : '/sendmail', 
    failureRedirect : '/signup' 
})); 

, auch nicht autorisierte Sitzung zu verhindern, innerhalb der/Anmeldungen Route, wird der Benutzer abgemeldet und die Sitzung zerstört wird.

app.get('/sendmail', function(req, res) { 
    res.render('mailsent.ejs', { 
     message: 'An email with verification link has been sent to ' + req.user.email + '. Please follow the link in your mail to verify your account before logging in.' 
    }); 
    /* From keeping user authenticated after signup (not verfied yet)*/ 
    req.logOut(); 
    req.session.destroy(); 
    } 
}); 

Meine Frage ist, wie die Sitzung bereits zerstört ist, Browser nichts zurück bekommt, wenn der Endbenutzer den Browser aktualisiert oder greift direkt auf die/sendmail Route. Wie man das verhindert. Mit anderen Worten, in der Route app.get ('/ sendmail'), wie würde ich prüfen, ob die Sitzung eingeschaltet ist (gültiges req-Objekt), sonst auf '/' umleiten.

Antwort

1

können Sie entweder eine Middleware-Route wie so verwenden:

app.use('/sendmail', function(req, res, next) { // Middleware for only the `/sendmail` route 
    if (req.session.authenticated) { 
     next(); 
    } else { 
     res.redirect("/"); 
    } 
}); 

oder einfach direkt in Ihre Route setzen:

app.get('/sendmail', function(req, res) { 
    if (!req.session.authenticated) { 
     return res.redirect("/"); // Redirect to home page if not authenticated 
    } 
    res.render('mailsent.ejs', { 
     message: 'An email with verification link has been sent to ' + req.user.email + '. Please follow the link in your mail to verify your account before logging in.' 
    }); 
    /* From keeping user authenticated after signup (not verfied yet)*/ 
    req.logOut(); 
    req.session.destroy(); 
    } 
}); 
+0

Hier req.session.authenticated ist nicht definiert und somit ‚/ sendmail 'leitet nur zu'/' – thethakuri

+0

Nun ja, es war nur ein Beispiel, müssen Sie eine Art Sitzungsvariable festlegen, um zu bestimmen, ob sie authentifiziert werden sollten oder nicht. Ersetzen Sie 'req.session.authenticated' durch' req.session.email', wenn Sie wollen, einfach alles, was zum Zeitpunkt der Authentifizierung gesetzt werden sollte – Datsik

+0

Nun, 'req.session' gibt immer false zurück. Aber 'req.user' arbeitete für mich. Ich teste den MEAN Stack aus und bisher gefällt es mir. Vielen Dank. – thethakuri

Verwandte Themen