护照 Facebook 身份验证 Returns 未定义?
Passport Facebook Authentication Returns Undefined?
我的facebook攻略如下:
passport.use(new facebookStrategy({
clientID: envVars.facebook.clientID,
clientSecret: envVars.facebook.clientSecret,
callbackURL: envVars.facebook.callbackURL,
passReqToCallback : true,
profileFields: ['id', 'emails', 'displayName']
},
function(token, refreshToken, profile, done) {
console.log(profile); //prints out undefined
}
));
而我的路由是这样处理的:
router.get('/facebook', passport.authenticate('facebook'));
router.get('/auth/facebook/redirect', passport.authenticate('facebook'),
function(req, res){
res.redirect("/profile");
});
我的代码设法成功完成的是将用户定向到 Facebook,在那里他们被提示允许我的应用程序访问他们的数据的权限。一旦接受我的 console.log(profile) 就会触发,但它会打印出 undefined 即使用户接受了许可?我已经搜索了文档,但似乎无法弄清楚我哪里出错了。
似乎是 passReqToCallback 的问题。参考这个问题:Using PassportJS, how does one pass additional form fields to the local authentication strategy?
对于您的情况,删除 passReqToCallback:true 标志。
passport.use(new facebookStrategy({
clientID: envVars.facebook.clientID,
clientSecret: envVars.facebook.clientSecret,
callbackURL: envVars.facebook.callbackURL,
profileFields: ['id', 'emails', 'displayName']
},
另一种选择是修改回调并使用第一个参数,即请求对象。
function(req, email, password, done) {
// now you can check req.body.foo
}
我的facebook攻略如下:
passport.use(new facebookStrategy({
clientID: envVars.facebook.clientID,
clientSecret: envVars.facebook.clientSecret,
callbackURL: envVars.facebook.callbackURL,
passReqToCallback : true,
profileFields: ['id', 'emails', 'displayName']
},
function(token, refreshToken, profile, done) {
console.log(profile); //prints out undefined
}
));
而我的路由是这样处理的:
router.get('/facebook', passport.authenticate('facebook'));
router.get('/auth/facebook/redirect', passport.authenticate('facebook'),
function(req, res){
res.redirect("/profile");
});
我的代码设法成功完成的是将用户定向到 Facebook,在那里他们被提示允许我的应用程序访问他们的数据的权限。一旦接受我的 console.log(profile) 就会触发,但它会打印出 undefined 即使用户接受了许可?我已经搜索了文档,但似乎无法弄清楚我哪里出错了。
似乎是 passReqToCallback 的问题。参考这个问题:Using PassportJS, how does one pass additional form fields to the local authentication strategy?
对于您的情况,删除 passReqToCallback:true 标志。
passport.use(new facebookStrategy({
clientID: envVars.facebook.clientID,
clientSecret: envVars.facebook.clientSecret,
callbackURL: envVars.facebook.callbackURL,
profileFields: ['id', 'emails', 'displayName']
},
另一种选择是修改回调并使用第一个参数,即请求对象。
function(req, email, password, done) {
// now you can check req.body.foo
}