我在使用 passport-facebook 和 nodejs/express 时遇到了一些问题。
成功的登录处理得很好。但是,由于某种原因,当 FB 连接登录失败时,我的应用程序会引发服务器错误,该错误未被捕获并返回状态 500。我相信我使用的是相当标准的护照配置,所以我有点不知道可以做什么成为问题。
在这种情况下,为了创建一个错误,我正在使用来自另一个应用程序的测试用户登录我的沙盒应用程序。
错误/堆栈跟踪表明错误在我没有触及的模块代码中:
AuthorizationError at Strategy.OAuth2Strategy.authenticate (/Users/username/Sites/node_projects/applicationname/node_modules/passport-facebook/node_modules/passport-oauth2/lib/strategy.js:126:25) at Strategy.authenticate (/Users/username /Sites/node_projects/applicationname/node_modules/passport-facebook/lib/strategy.js:84:41)尝试(/Users/username/Sites/node_projects/applicationname/node_modules/passport/lib/passport/middleware/authenticate.js :243:16) 在 Passport.authenticate (/Users/username/Sites/node_projects/applicationname/node_modules/passport/lib/passport/middleware/authenticate.js:244:7) 在回调 (/Users/username/Sites/node_projects /applicationname/node_modules/express/lib/router/index.js:164:37) 在参数 (/Users/username/Sites/node_projects/applicationname/node_modules/express/lib/router/index.js:138:11) 在 Router._dispatch (/Users/username/Sites/node_projects/ applicationname/node_modules/express/lib/router/index.js:173:5) 在 Object.router (/Users/username/Sites/node_projects/applicationname/node_modules/express/lib/router/index.js:33:10)在下一个(/Users/username/Sites/node_projects/applicationname/node_modules/express/node_modules/connect/lib/proto.js:193:15)路由器(/Users/username/Sites/node_projects/applicationname/node_modules/express/lib/router/index.js:33:10)在下一个(/Users/username/Sites/node_projects/applicationname/node_modules/express/node_modules/connect /lib/proto.js:193:15)路由器(/Users/username/Sites/node_projects/applicationname/node_modules/express/lib/router/index.js:33:10)在下一个(/Users/username/Sites/node_projects/applicationname/node_modules/express/node_modules/connect /lib/proto.js:193:15)
这是路线,非常标准:
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { successRedirect: '/#',
failureRedirect: '/#login' }));
req.query 是
{"error_code":"2102","error_message":"User is not a test user owned by the application"}
在阅读了这个已解决的问题(https://github.com/jaredhanson/passport-oauth/issues/16)后,我添加了中间件,以便 req.query 是:
{"error_code":"2102","error_message":"User is not a test user owned by the application","error":true}
这是我添加的中间件(我将其删除,因为它不起作用):
app.use(function(req, res, next){
if (req.query && !req.query.error && req.query.error_code) {
req.query.error = true;
}
next();
});
我应该更新我的软件包并尝试卸载/重新安装所有内容:
"dependencies": {
"express": "3.x",
"mongodb": "1.3.x",
"socket.io": "0.9.x",
"mongoose": "3.6.x",
"passport": "0.1.x",
"passport-facebook": "1.0.x",
"passport-local": "0.1.x",
"bcrypt": "0.7.x",
"handlebars": "1.0.x",
"consolidate": "0.9.x",
"imagemagick": "0.1.x",
"aws-sdk": "1.12.x"
},
到目前为止没有运气并且没有想法,没有直接破解模块,这似乎没有必要。
有什么想法吗?
首先十分感谢。