Ich versuche, meinen Benutzer über Facebook mit der Verwendung von PassportJS anzumelden und die Benutzerdaten an Angular weiterzuleiten. Auf der Serverseite sieht alles durch den folgenden Code für den Rückruf Facebook Benutzer Controller ok:Benutzerdaten von Nodejs Server nach erfolgreicher Anmeldung in Angular verschieben
exports.facebookCallback = function() {
return function(req, res, next) {
passport.authenticate('facebook', function(err, user, email) {
if (err || !user) {
return res.redirect('/auth');
}
req.login(user, function(err) {
if (err) {
return res.redirect('/auth');
}
return res.redirect('/');
});
})(req, res, next);
};
};
Von dem, was ich von dem PassportJS docs verstehen, req.login Aufruf sollte Benutzerdaten in die Sitzung gestellt.
Meine Strecken auf der Server-Seite sieht folgendermaßen vor:
app.get('/auth', usersCtrl.auth);
app.get('/auth/signout', usersCtrl.logout);
app.get('/auth/facebook', passport.authenticate('facebook', {
scope: ['email', 'user_hometown']
}));
app.get('/auth/facebook/callback', usersCtrl.facebookCallback());
express und Passkonfiguration umfasst:
app.use(express.cookieParser());
app.use(express.session({secret: '1234567890QWERTY'}));
app.use(express.bodyParser());
app.use(passport.initialize());
app.use(passport.session());
nun auf der Winkel Seite Ich versuche, die Benutzerdaten aus der Sitzung in einem zu bekommen Service definiert wie folgt:
module.exports = require('angular')
.module('HomeModule', [])
.controller('HomeCtrl', function ($scope) {
//home controller code ors here
}).controller('NavbarCtrl', ['$scope', 'Authentication', function ($scope, Authentication) {
$scope.authentication = Authentication;
//rest of the navbar controller goes here
}]).factory('Authentication', [
function() {
var _this = this;
_this._data = {
user: window.user
};
return _this._data;
}
]);
Leider sind die Benutzerdaten nicht verfügbar in window.user auf winkliger Seite. Irgendwelche Ideen, was ich hier falsch mache?
Ist 'window.user' Ihr Mittel, um den Benutzer beim Laden einer Seite vom Server zum Client zu leiten? Wenn ja, ist das tatsächlich eingestellt worden? – scarlz
Nicht wirklich. Ich bin neu in der Welt von JS, also verstehe ich vielleicht nicht alles. Hier ist, wie ich es sehe: Die Funktion req.login von PassportJS legt die Benutzerdaten in die Sitzung (und es wurde durch das Debuggen bestätigt), jetzt auf der Clientseite ist diese Sitzungsvariable in dem Fensterobjekt verfügbar. Liege ich hier falsch? – Jakub
Passport stellt Ihren authentifizierten Benutzer über 'req.user' zur Verfügung, dies ist jedoch nicht auf dem Client verfügbar (wo' window' existiert), es sei denn, Sie haben ihn als solchen festgelegt. Können Sie oberhalb der Funktion, die Ihre Indexseite rendert, einbeziehen? – scarlz