护照authentication失败导致redirect循环

我正在使用节点,快递和护照与Facebook身份validation。
我有以下路线(当/facebook/auth/callback是callbackurl):

 function render(page, req, res) { var user = null; if (req.user) { user = req.user.toObject(); user.isLoggedIn = true; } res.render(page, { user: user }); } app.get('/auth-failure', function (req, res) { res.render('auth-failure'); }); app.get('/auth-success', function (req, res) { render('auth-success', req, res); }); app.get('/facebook/auth', passport.authenticate('facebook', { scope: [ 'email', 'user_about_me', 'publish_actions']})); app.get('/facebook/auth/callback', passport.authenticate('facebook', { failureRedirect: '/auth-failure', successRedirect: '/auth-success' })); 

当authentication成功时,我得到了页面auth-success视图,如我所料。 但当身份validation失败,Facebook返回到: http:// localhost:3000 / facebook / auth / callback?error_code = 2102&error_message = User + is + not + a + test + user + owned by + the + application# =

我没有得到auth-failure视图! 相反,firefox返回我的网页:

在这里输入图像描述

在Chrome中运行时,我得到以下消息: 在这里输入图像描述

我试图检查的东西,我把故障路由器更换为:

 app.get('/facebook/auth/callback', function (req, res) { res.redirect('/auth-failure'); }); 

这就成功地呈现了auth-failure视图。
什么是passport.js facebook失败authentication的问题?
为什么它返回我的错误页面?

对于@Matt Bakaitis评论:
这里是我序列化和反序列化的function:

 // serialize sessions passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findOne({ _id: id }, function (err, user) { done(err, user); }); }); 

我相信这是因为你正在使用自定义callback,并需要提供像….

  app.get('/facebook/auth/callback', function(req, res, next) { passport.authenticate('facebook',.............. 

我会激发提琴手 ,看看究竟是通过电线发送。

做更多的研究,因为我也使用passport.js与facebook(和其他)集成,看起来这可能已经是passport-oauth(护照-Facebook使用)报告的公开问题 。

logging该问题的人对oauth2代码行98上的错误检查有一个解决方法:

  app.get('/auth/facebook', passport.authenticate('facebook')); app.get('/auth/facebook/callback', , function(req, res, next) { if (req.query && !req.query.error && req.query.error_code) { req.query.error = true; } next(); } , passport.authenticate('facebook', { failureRedirect: '/auth-failure', successRedirect: '/auth-success' } ); 

对于好的措施,在Facebook上仔细检查您的设置也是一个好主意,并且您的本地主机被列在正确的位置。 另外,请检查Node.js中的所有内容。 当我在configurationstring中input错误时,我遇到了passport-twitter的问题,因为它没有在Node.js中抛出错误,但导致我的validation失败,难以捕捉。 这里有几个与你有相同的error_message人的链接,他们似乎表示Facebook的configuration问题:

  • redirect_uri不属于应用程序
  • Facebooklogin,redirect_uri不属于应用程序。 为什么?
  • facebook oauth apilogin问题