2016-08-30 8 views
1

私はpassport-facebookを使用してユーザーにログインしています。facebookがmytコールバックを呼び出すと、私は定義されていないループに入ります。私は多くのサイトと質問を読んできましたが、実際には、私はどんな解決策も見つけることができません。ここでNode.js passport-facebookコールバックループ

がコードである、 - 私はそれがUNE単一のファイルにしたように、ここではそれをすべてを置くつもり:本当に、私は非常にイライラしてる

var restify = require('restify'); 
var passport = require('passport-restify'); 
var FacebookStrategy = require('passport-facebook').Strategy; 

var server = restify.createServer(); 
server.use(restify.bodyParser()); 

passport.use(new FacebookStrategy({ 
    clientID: 'APP_ID', 
    clientSecret: 'APP_SECRET', 
    callbackURL: 'http://192.168.0.13:8080/login/facebook/callback' 
    }, function (token, refreshToken, profile, done) { 
     //this code never is executed, why? 
     return done(null, profile); 
    })); 

server.use(passport.initialize()); 

server.get('/login/facebook', function(req, res, next) { 
    passport.authenticate('facebook', { display: null, scope: ['email']})(req, res, next); 
}); 

server.get('/login/facebook/callback', (req, res, next) => { 
     //here is where the loop happends, i´m getting into this and never can go out from here 
     passport.authenticate('facebook', function(profile) { 
      //I could not execute this 
      if (!profile || !profile.id) { 
       return res.json(500, 'We had trouble signing you up with Facebook. Please try again or sign-up via email.'); 
      } else { 
       res.json(200, profile); 
      } 
     })(req, res, next); 
}); 

server.listen(config.port, function() { 
    console.log('%s listening at %s', server.name, server.url); 
}); 

、私は今、私は今、そこにあります何千ものポストを話して...私はそれらのすべてを試して、とにかくここにいる...

ありがとう。

+0

serialize/deserialize関数を表示できますか? – John

+0

passport.serializeUser(function(profile、done){ done(null、profile); }); passport.deserializeUser(function(profile、done){ done(null、profile); }); –

+0

serializeUserの中で、この 'done(null、profile)'を 'done(null、profile.id)'に置き換えようとしました。 – John

答えて

0

しばらくして問題が見つかりました。私が投稿したのは、複数のテストの結果でした。

問題は私がparhentesisを悪い方法で使用していたことでした。 、私はこれをやっていた 最も簡単な:

server.get('/login/facebook/callback', passport.authenticate('facebook', (req, res, next) => { /* magic here*/ }); 

ので、次の()の実行のためのコールバックはそれのように渡されたがauthenticateメソッドにしました。これは私が問題を理解していなかったからではありませんでした。ただエラーがどこにあるのか分かりませんでした。

正しい方法は次のようになります。

server.get('/login/facebook/callback', passport.authenticate('facebook'), (req, res, next) => { /* magic here */ }); 

おかげ協力のための皆。