SailsJS and PassportJS Facebook auth



我正在尝试使用SailsJS护照。永远不会调用passport.authenticate('facebook')方法,也不会发送任何响应。在config/passports.js中初始化Passport和我的策略。

config/passport.js :

const passport = require('passport');
const FacebookStrategy = require('passport-facebook').Strategy;
passport.serializeUser(function (user, done) {
  done(null, user.id);
});
passport.deserializeUser(function (id, done) {
  User.findOne({id: id}, function (err, user) {
    done(err, user);
  });
});
passport.use(new FacebookStrategy({
  /* IDS */
}, (token, refreshToken, profile, next) => {
    /* logic here */
  })
}));

初始化护照和序列化方法。

我按照以下顺序在config/http.js文件中设置了passport.init()passport.session()中间件:

'startRequestTimer',
'cookieParser',
'session',
'passportInit',
'passportSession',

路由/auth/facebook使用以下控制器:

passport.authenticate('facebook', {scope: ['email', 'user_about_me']},
      (err, user) => {
        req.logIn(user, (err) => {
          if (err) return res.send(err);
          return res.redirect('/');
        })
      });

当我调用/auth/facebook时,我的所有请求都超时了,passport从不调用我的认证方法。

我做错了什么?

护照。Authenticate返回一个函数,您必须调用该函数才能工作。

我是这样使用的:

'facebook': function (req, res, next) {
  passport.authenticate('facebook', {scope: ['email', 'user_about_me']}, function (err, user) {
    req.logIn(user, function (err) {
      if(err) {
        res.redirect('user/login');
      } else {
        res.session.user = user;
        res.redirect('/');
      }
    });
  })(req, res, next);
},

最新更新