用Passport和ExpressJS进行Facebook身份validation – 为什么validationcallback没有被调用?

我是Passport在ExpressJS应用程序中对用户进行身份validation。 我试图将所有的Facebook路线放在他们自己的模块中,因为我打算支持其他OAuth提供商。 在我的启动脚本中,我定义了所需的FB端点:

var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var facebook = require('./routes/facebook'); var login = require('./routes/login'); var http = require('http'); var path = require('path'); var app = express(); /* Configuration stuff here*/ // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/login', login.index); app.get('/auth/facebook', facebook.fb_auth); app.get('/auth/facebook/callback', facebook.fb_callback); 

正如你可以看到我要求我的“脸谱”模块,其中包含实际路线和Facebookvalidationcallback。 它看起来像这样:

 var passport = require('passport') , FacebookStrategy = require('passport-facebook').Strategy , User = require('../services/user'); passport.use(new FacebookStrategy({ clientID: 'myclientid', clientSecret: 'mysecretkey', callbackURL: "http://localhost:3000/auth/facebook/callback" //localhost:3000 domain is registered domain in fb }, function(accessToken, refreshToken, profile, done) { console.log('verify') User.findOrCreate(profile, function(err, user){ if(err) return done(err); done(null, user); }); } )); // Redirect the user to Facebook for authentication. When complete, // Facebook will redirect the user back to the application at // /auth/facebook/callback exports.fb_auth = function(req, res){ passport.authenticate('facebook') }; // Facebook will redirect the user to this URL after approval. Finish the // authentication process by attempting to obtain an access token. If // access was granted, the user will be logged in. Otherwise, // authentication has failed. exports.fb_callback = function(req, res){ console.log('callback') passport.authenticate('facebook', { successRedirect: '/', failureRedirect: '/login' }); }; 

我可以看到(logging到stdout)fb_auth被调用,但上面定义的validationcallback函数永远不会。 我可以俯视吗? 有什么地方可以捕捉到错误吗?

谢谢!

我在这里find了答案: 使用PassportJS和Connect for NodeJS来validationFacebook用户

您需要显式调用“authenticate”函数,并为其提供req,res和next。

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