Verwenden von PassportJS mit Connect for NodeJS zur Authentifizierung von Facebook-Benutzern

Ich versuche, Passport über Connect in meinen NodeJS-Server zu integrieren, aber es scheint nicht richtig zu funktionieren. Alle Handbücher / Beispiele verwenden expressJS, daher habe ich versucht, den Code so neu zu formatieren, dass er mit meinem Code funktioniert, aber ich kann ihn scheinbar nicht zum Laufen bringen. Die zugehörigen Teile sind nachstehend aufgeführt. Hat jemand einen Rat, was das Problem sein könnte? passport.authenticate () wird anscheinend nie aufgerufen (zumindest die console.log-Nachricht im Facebook-Authentifizierungsrückruf wird nie gedruckt). Momentan speichere ich nichts in einer Datenbank, daher sollte das Problem hoffentlich etwas wirklich Einfaches sein, das mir nur fehlt.

Das einzige, was mir in den Sinn kommt, ist der potenzielle Rückruf, den ich für Facebook habe, bei dem es sich um eine localhost-URL handelt (da ich diese noch lokal entwickle). Ich war in der Lage, mich mit Facebook mit everyauth (von einer rein lokalen Instanz aus) zu authentifizieren, wechselte aber zu passportJS, da ich dort verschiedene Probleme hatte, die passportJS zu lösen 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 Rat oder eine Panne in dem, was ich tue? Meine anderen beiden Alternativen sind das Zurückschalten auf Everyauth und das Herausfinden, was dort vor sich geht, oder das Wechseln zu ExpressJS, aber ich würde lieber keine dieser Optionen wählen.

Beste,
Sami

Antworten auf die Frage(1)

Ihre Antwort auf die Frage