我试图在我的MEAN堆栈应用程序中设置facebook身份验证。编写的代码工作到了在Facebook上验证用户的程度,但是当它被发送回我的应用程序时,回调函数会运行,但int a = hours<=40?0:1;
switch(a){
case 0:
//do <=40 stuff.
break;
case 1:
//do >40 stuff.
break;
}
部分不会运行。
这是路由文件中的代码:
passport.authenticate('facebook'.....
&#34;回调&#34;在控制台中输出但是应用程序刚处于加载状态,直到它超时。
这是我用来配置护照的passport.js文件:
app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' }));
app.get('/auth/facebook/callback', function() {
console.log('callback')
passport.authenticate('facebook', {
successRedirect : '/',
failureRedirect : '/fail'
})
});
答案 0 :(得分:0)
在/auth/facebook/callback
中,您正在路由处理程序中执行passport.authenticate
而不是作为中间件,即。在文档中称为custom callback。此调用返回一个函数,但您不执行它,因此没有任何反应。
您需要在此处运行passport.authenticate
作为中间件(the usual way),或实际使用req
,res
和next
您的路由处理程序接收的参数(但您省略)并将它们传递给路由处理程序中的authenticate
调用。
中间件方式显示在documentation of passport-facebook
中,即。对你来说就是:
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
successRedirect : '/',
failureRedirect : '/fail'
})
);
如果您出于某种原因希望使用自定义回调,则需要以下内容:
app.get('/auth/facebook/callback', function(req, res, next) {
passport.authenticate('facebook', function(err, user, info) {
// Do your things and then call `req.logIn` and stuff
})(req, res, next);
});