0

私のアプリケーションでは、facebook アカウントでログインを追加しようとしています。とりあえずローカル攻略でパスポートを使っているので、フェイスブック攻略を追加してみました。Facebook 開発者サイトに登録して、トークンとシークレットを取得しました。公式のパスポート github からソース コードの一部をコピーして貼り付けるだけで、個人的な使用に適応します。呼び出し時に問題が発生します

passport.authenticate('facebook');

Facebook のログイン ページにリダイレクトされず、ここで立ち往生しています。アプリケーションが応答を待っているか、リダイレクトされるのを待っていますが、何も起こりません。Facebook 開発者ページでコールバック URL を提供しようとしましたが、それなしで試しました (コールバックを渡すと、パスポート戦略がスローされます)。

何が欠けていますか?

私のアプリケーション:

app.get('/auth/facebook', user_routes.facebookLogin);
app.get('/auth/facebook/callback', user_routes.facebookCallback);

私のルート:

exports.facebookLogin = function(req, res, next) {
      console.log('Try to login with facebook');
      passport.authenticate('facebook'); //<---------------- does not go further than here
};

exports.facebookCallback = function(req, res, next){
    passport.authenticate('facebook', { 
        successRedirect: '/home',
        failureRedirect: '/login' });
};

私の戦略:

passport.use(new FacebookStrategy({
    clientID: "xxxxxxxx",
    clientSecret: "xxxxxxxxxxx",
    callbackURL: "http://localhost:8080/auth/facebook/callback"
  },
  function(accessToken, refreshToken, profile, done) {
      User.findOne({ username: profile.displayName, email: profile.emails[0].value }, function(err, olduser) {
           if (err) { return done(err); }
           if (olduser) { 
               return done(null, olduser); 
           }
           else{
               var newuser = new User({
                   username: profile.displayName, 
                   email: profile.emails[0].value
               }).save(function(err,newuser){
                  if(err) console.log(err);
                  done(null,newuser);
               });
           }

      });
  })
);

[編集]

コールバックのルーティングをこれに変更すると、問題が解決します。しかし、私はその理由を理解していません...

app.get('/auth/facebook/callback', 
  passport.authenticate('facebook', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/home');
  });
4

1 に答える 1