0

在我的应用程序中,我正在尝试使用 facebook 帐户添加登录。由于我目前正在使用本地策略的护照,因此我尝试添加 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

0

终于在这里找到了解决方案:

使用 PassportJS 和 Connect for NodeJS 来验证 Facebook 用户

和这里:

使用 Passport 和 ExpressJS 进行 Facebook 身份验证 - 为什么不调用验证回调?

于 2013-11-18T21:50:31.250 回答