Использование PassportJS с Connect для NodeJS для аутентификации пользователей Facebook

Я пытаюсь интегрировать passport в мой сервер nodejs с помощью connect, но, похоже, не могу сделать это правильно. Все руководства / примеры используют expressJS, поэтому я изо всех сил пытался переформатировать код для работы с моим кодом, но я не могу заставить его работать. Соответствующие части написаны ниже. У кого-нибудь есть советы, в чем может быть проблема? паспорт.authenticate () никогда не вызывается (по крайней мере, консоль.сообщение журнала в обратном вызове аутентификации facebook никогда не печатается). Я в настоящее время ничего не сохраняется в базе данных, поэтому проблема, надеюсь, должна быть чем-то очень простым, что мне просто не хватает.

единственное, что приходит на ум, - это потенциальный обратный вызов для facebook, который является url-адресом localhost (поскольку я все еще разрабатываю это локально). Я смог аутентифицироваться с facebook просто отлично, используя everyauth (из чисто локального экземпляра), но переключился на passportJS, так как у меня были разные проблемы, которые passportJS, казалось, адрес.

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.');
}

есть ли у кого-нибудь советы или увидеть сбой в том, что я делаю? Мои другие две альтернативы переключаются обратно на everyauth и выясняют, что там происходит, или переключаются на ExpressJS, но я бы предпочел не идти ни с одним из этих вариантов.

лучший
сами

1 ответов


passport.authenticate возвращает функцию, которая обычно используется в цепочке промежуточного ПО, которая вызывается с помощью req и res курьерским.

он будет работать автономно внутри другого промежуточного программного обеспечения или обработчика маршрута, такого как ваш