2017-10-05 2 views
1

Ich schreibe eine Website mit Express und Reisepass für die Authentifizierung (und Mongodb als Datenbank) und ich weiß, wie ich Benutzer authentifizieren kann und wie ich bestimmte Seiten so beschränken kann, nur angemeldet in Benutzer können sie zugreifen. aber ich habe eine Frage, zu der ich die Antwort nirgends finden kann:Ändern und Speichern einer Weiterleitung mit Passport.js unter verschiedenen Umständen

Wenn ein Benutzer versucht, zu einer eingeschränkten Webseite zu gehen und es merkt, dass ein Benutzer nicht mit req.isAuthenticated() eingeloggt ist, leitet er den Benutzer zur Anmeldung um Wenn der Benutzer sich anmeldet, leitet er den Benutzer auf seine Profilseite um. normalerweise ist das in Ordnung, aber in diesem Fall hat der Benutzer versucht, zu einer anderen eingeschränkten Seite zu wechseln, die nicht die Profilseite ist.

Wie kann ich den Benutzer auf die Profilseite umleiten, wenn er sich anmeldet, aber wenn er/sie gerade versucht, auf eine eingeschränkte Seite zuzugreifen, bitten Sie ihn, sich einzuloggen und ihn dann an die Seite, auf die er/sie zuzugreifen versucht hat?

Antwort

0

Sie könnten Ihre eigene Middleware ähnlich wie unten machen die Umleitung auf dieser Strecke zu handhaben:

this.ensureAuthenticatedOrSendToLogin = (req, res, next) => { 
    if (req.isAuthenticated()) { 
    return next(); 
    } 
    return res.redirect('/login'); 
}; 

Sie dann ein Feld, um die Sitzung hinzufügen könnte eine RedirectTo mit der URL zu speichern, von der Anfrage: req.session.redirectTo = req.url und Laden Sie es nach der Anmeldung vor der erfolgreichen Weiterleitung nach der Authentifizierung.

Eine vereinfachte Version können Sie verwenden:

this.saveRedirect = (req, res, next) => { 
    req.session.redirectTo = req.url; // could pass this in from query too if redirect should be different! 
    return next(); 
}; 

this.checkRedirect = (req, res, next) => { 
    const { redirectTo } = req.session; 
    if (redirectTo) { 
    const redirect = redirectTo; 
    req.session.redirectTo = undefined; // reset session field so its not carried out again if you call this without saving again 
    return res.redirect(redirect); 
    } 
    return next(); 
}; 
+0

dank Mann. sieht wie eine großartige Lösung aus. Ich habe irgendwie eine rly-Hacky-Lösung gefunden (indem ich unsichtbare Felder zu einem HTML-Formular hinzufügte), aber das scheint jetzt nur dumm: P. Probiere es aus, sobald ich die Chance habe. – jonathan

+0

auch, NICHT tun, was ich tat, indem ich unsichtbare Felder zu einem HTML-Formular hinzufügen ... es ist eine Menge Arbeit und es ist nicht eine nette Lösung .... – jonathan

Verwandte Themen