Passport-Facebook 即使在范围内也不提供电子邮件
Passport-Facebook not providing email even if it is in scope
在我的应用程序中,我按如下方式注册了 facebook-strategie:
但是返回的配置文件不包含电子邮件字段....
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
passReqToCallback: true
},
function(req, accessToken, refreshToken, profile, done) {
// No email in the following colsole.log
console.log(JSON.stringify(profile));
}));
获取结果如下:
app.get('/oauth/facebook', passport.authenticate('facebook', {
failureRedirect: '/login',
scope:['email']
}));
(所以我正在使用这里所说的范围:Passport-facebook doesn't get email)
在 FB 登录页面上,我什至要求提供电子邮件,我确实提供了:
非常感谢任何帮助!
你确实有代码的回调部分,对吧?:
app.get('/oauth/facebook/callback', passport.authenticate('facebook', {
failureRedirect: '/login',
successRedirect: '/',
scope:['email']
}));
而且,是的,确实,这应该根据您的 link 和这个 here also.
的说明使用 scope:['email']
完成
从Facebook graph APIv2.4开始,我们需要明确指定要获取的字段。
所以,我们可以这样写:
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
profileFields: ['id', 'email', 'gender', 'link', 'locale', 'name', 'timezone', 'updated_time', 'verified'],
},
您需要指定范围:"email"。
参考下面的代码。
Facebook 身份验证路由:
// auth facebook
router.get("/auth/facebook", passport.authenticate("facebook", {
scope: "email"
}));
并且在配置 FacebookStrategy 时,您还需要指定 profileFields。
passport.use(new FacebookStrategy({
callbackURL: "http://localhost:5000/auth/facebook/redirect",
clientID: keys.facebook.clientID,
clientSecret: keys.facebook.clientSecret,
profileFields: ['id', 'displayName', 'photos', 'email', 'gender', 'name']
}, (accessToken, refreshToken, profile, done) => {
// logic
}))
在我的应用程序中,我按如下方式注册了 facebook-strategie: 但是返回的配置文件不包含电子邮件字段....
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
passReqToCallback: true
},
function(req, accessToken, refreshToken, profile, done) {
// No email in the following colsole.log
console.log(JSON.stringify(profile));
}));
获取结果如下:
app.get('/oauth/facebook', passport.authenticate('facebook', {
failureRedirect: '/login',
scope:['email']
}));
(所以我正在使用这里所说的范围:Passport-facebook doesn't get email)
在 FB 登录页面上,我什至要求提供电子邮件,我确实提供了:
非常感谢任何帮助!
你确实有代码的回调部分,对吧?:
app.get('/oauth/facebook/callback', passport.authenticate('facebook', {
failureRedirect: '/login',
successRedirect: '/',
scope:['email']
}));
而且,是的,确实,这应该根据您的 link 和这个 here also.
的说明使用scope:['email']
完成
从Facebook graph APIv2.4开始,我们需要明确指定要获取的字段。
所以,我们可以这样写:
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
profileFields: ['id', 'email', 'gender', 'link', 'locale', 'name', 'timezone', 'updated_time', 'verified'],
},
您需要指定范围:"email"。 参考下面的代码。
Facebook 身份验证路由:
// auth facebook
router.get("/auth/facebook", passport.authenticate("facebook", {
scope: "email"
}));
并且在配置 FacebookStrategy 时,您还需要指定 profileFields。
passport.use(new FacebookStrategy({
callbackURL: "http://localhost:5000/auth/facebook/redirect",
clientID: keys.facebook.clientID,
clientSecret: keys.facebook.clientSecret,
profileFields: ['id', 'displayName', 'photos', 'email', 'gender', 'name']
}, (accessToken, refreshToken, profile, done) => {
// logic
}))