Express-Weiterleitung nach dem login-Authentifizierung
Arbeite ich an einer app, die hat node.js und der express auf dem server, mongodb für die db und Backbone.js auf dem front-end. Ich arbeite zum aktivieren von Benutzer-logins, so dass ich verwendet habe, der passport.js Bibliothek. Ich habe ein problem mit meinem login 'post' - Methode: Es ist keine Umleitung zu einer anderen Seite (es ist ein SPA, so meine ich, rendering eine Backbone-view). Hier ist der code:
//standard express setup...
app.post('/api/auth', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err) }
if (!user) {
req.session.messages = [info.message];
return res.redirect('/')
}
req.logIn(user, function(err) {
if (err) {
return next(err);
} else {
console.log('yup, working'); //Can see the response in the console
return res.redirect('/api');
}
});
})(req, res, next);
});
app.get('/api', function (request, response) {
response.send( 'Login successful!' );
});
Also kann ich die Konsole sehen.log-Meldung in Ordnung, und eine GET-Anforderung für die route ausgelöst WIRD...aber nichts passiert. Also ich denke, dass ich falsch verstanden habe, wie 'res.redirect " funktioniert - ich will navigieren, um die route auf der login-Erfolg. Ich habe darüber nachgedacht mit Fenster.Lage, aber ist das eine gute langfristige Lösung? Ich bin nicht mit einem beliebigen html-Vorlagen auf dem server, also kann ich nicht (ich glaube nicht) tun, etwas so einfaches wie 'res.render('index')'
Was wäre der beste Weg, dies zu nähern? Vielen Dank im Voraus.
- Sie können dies lösen, mit der einfache Weg, der nur mit
window.href
oder nicht verwendenres.redirect
und stattdessen einige json, die die client-Seite erwartet zu haben, um sich zu bewegen auf, mit dem zu tun, was ist tun soll. Wenn möglich halten Sie eine einzelne backbone-Modell Benutzer und überwachen Sie den status mit diesem Modell dann alle anderen Modelle hören auf die User-Modell und Maßnahmen ergreifen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich ein face-palm-moment, ein paar Tage nachdem du diese Frage gestellt hast, wo ich merkte, ich hatte nicht zu begreifen ein Kern-Konzept richtig. Lassen Sie mich Antwort auf meine eigene Frage:
Anstatt zu versuchen, die Seite zu bedienen, die vom server, ich muss nur zum senden einer Antwort an den client und Backbone das rendering, je nach der erhaltenen Antwort. Also mein server ist so etwas wie dieses:
Dann Mach ich dem laden der Seite in das Rückgrat Ansicht wie diese:
Als Pheonix darauf hingewiesen, in den Kommentaren, der beste Weg, dies zu tun wäre, zu hören, zu der der Benutzer die Modell.