Ich versuche, den Passport mit connect in meinen nodejs-Server zu integrieren, aber es scheint nicht richtig zu funktionieren. Alle Leitfäden/Beispiele verwenden expressJS, also habe ich mein Bestes versucht, den Code so umzuformatieren, dass er mit meinem Code funktioniert, aber ich kann es nicht funktionieren lassen. Die zugehörigen Teile sind unten beschrieben. Hat jemand einen Rat, was das Problem sein könnte? pass.authenticate() scheint nie aufgerufen zu werden (zumindest die console.log-Nachricht im Facebook-Authentifizierungs-Callback wird nie gedruckt). Ich speichere gerade nichts in einer Datenbank, daher sollte das Problem hoffentlich etwas sehr Einfaches sein, das ich gerade vermisse.Verwenden von PassportJS mit Connect für NodeJS zum Authentifizieren von Facebook-Benutzern
Das einzige, was mir in den Sinn kommt, ist der potentielle Rückruf, den ich für Facebook habe, das ist eine localhost-URL (da ich diese noch lokal entwickle). Ich war in der Lage, mich mit facebook zu authentifizieren, indem ich everauth verwendete (von einer rein lokalen Instanz), aber zu passJS wechselte, da ich dort verschiedene Probleme hatte, mit denen sich passJS zu befassen schien.
passport = require('passport');
fpass = require('passport-facebook').Strategy;
passport.serializeUser(function(user,done){
done(null, user);
});
passport.deserializeUser(function(obj,done){
done(null,obj);
});
passport.use(new fpass({
clientID:'facebook app id',
clientSecret:'facebook app secret',
callbackURL:'http://localhost:3000/auth/facebook/callback'
},
function(accessToken, refreshToken, fbUserData, done){
console.log('got here');
return done(null,fbUserData);
}
));
function checkLoggedIn(req, res, next){
console.log("req.user: " + req.user);
if(req.user)
next();
else{
console.log('\nNot LOGGED IN\n');
if(req.socket.remoteAddress || req.socket.socket.remoteAddress == '127.0.0.1'){
var folder,contentType;
console.log('req url = '+req.url);
if(req.url == '/'){
folder = __dirname + '/landingPage.html';
contentType = 'text/html';
}
else if(req.url == '/auth/facebook'){
passport.authenticate('facebook');
return;
}
else if(req.url == '/auth/facebook/callback'){
passport.authenticate('facebook', {failureRedirect: '/failbook', successRedirect:'/'});
return;
}
if(folder){
console.log('got to folder part\n\n');
fs.readFile(folder, function(error, content){
if(error){
res.writeHead(500);
res.end();
}
else{
res.writeHead(200, {'Content-Type': contentType});
res.end(content);
}
});
}
else{ res.writeHead(500); res.end();}
}
else {res.writeHead(500); res.end();}
}
}
connect.createServer(
connect.cookieParser(),
connect.bodyParser(),
connect.session({secret:'wakajakamadaka'}),
passport.initialize(),
passport.session(),
checkLoggedIn).listen(8888);
console.log('Server has started.');
}
Hat jemand einen Ratschlag oder sieht einen Fehler in dem, was ich mache? Meine anderen beiden Alternativen sind, zu jedem Autohandy zurückzukehren und herauszufinden, was dort vor sich geht, oder zu ExpressJS zu wechseln, aber ich möchte lieber nicht mit einer dieser Optionen gehen.
Best,
Sami
hmm ich komme weiter, als ich vorher war, aber es funktioniert noch nicht ganz. Jetzt registriere ich den Rückruf von Facebook. Ich überprüfe jetzt '/ auth/facebook/callback' gegen req.url.split ('?') [0], damit der Callback registriert wird. Das Hinzufügen von a (req, res, next) nach dem Funktionsaufruf verursacht eine unendliche Umleitungsschleife. irgendwelche Ideen? – thisissami
Ich denke, Sie müssen 'connect.query()' Middleware in Ihrem 'createServer' Middleware-Setup verwenden. Passport erwartet, dass "req.query" in vielen Fällen ausgefüllt wird, einschließlich des Erhalts des Autorisierungscodes im Facebook-Rückruf. –
fast da ... mit einem '(req, res, next)' am Ende des Callback-Authentifizierungsaufrufs wird die Facebook-Response-Funktion mit den entsprechenden Facebook-Daten erreicht. Allerdings bekomme ich einen 'TypeError: Object # hat keine Methode 'redirect'. Die problematische Codezeile lautet 'return res.redirect (options.successRedirect);' in Zeile 97 von authenticate.js. Irgendeine Idee, was das Problem sein könnte? –
thisissami