当我调用passport.authenticate('facebook');
时,页面继续加载并因超时而失败。 Facebook身份验证屏幕永远不会显示。关于我犯错误的任何线索?
以下是我的代码段。
var User = require('../models/user.js'),
passport = require('passport'),
FacebookStrategy = require('passport-facebook').Strategy;
passport.use(new FacebookStrategy({
clientID: 'appId-XXX',
clientSecret: 'appSecret-xxx',
callbackURL: 'https://xxx/auth/facebook/callback'
},
function(accessToken, refreshToken, profile, done) {
process.nextTick(function() {
var authID = 'facebook' + profile.id;
User.findOne({
authId: authID
}, function(err, user) {
if (err) return done(err, null);
if (user) return done(null, user);
user = new User({
authID: authID,
name: profile.displayName,
created: Date.now(),
role: 'customer'
});
user.save(function(err) {
if (err) return done(err, null);
done(null, user);
});
});
});
}));
app.use(passport.initialize());
app.use(passport.session());
app.get('/auth/facebook', function(req, res, next) {
console.log('Calling Facebook Authenticate');
passport.authenticate('facebook');
});
app.get('/auth/facebok/callback', passport.authenticate('facebook', {
successRedirect: options.successRedirect,
failureRedirect: options.failureRedirect
}));
答案 0 :(得分:0)
passport.authenticate
返回一个middlware,用于这样:
app.get('/auth/facebook', passport.authenticate('facebook'));
由于您正在调用它而不是直接传递它,因此您应该调用它返回的中间件将req, res, next
传递给它。
app.get('/auth/facebook', function(req, res, next) {
console.log('Calling Facebook Authenticate');
passport.authenticate('facebook')(req, res, next);
});