Passport-Facebook не предоставляет электронную почту, даже если она находится в области
В моем приложении я регистрирую facebook-стратегию следующим образом:
Но возвращенный профиль не содержит поля электронной почты....
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']
}));
(Итак, я использую область действия, как сказано здесь: Паспорт-facebook не получает электронную почту)
На странице FB-Login iam даже попросил отправить электронное письмо, и я предоставляю его:
![enter image description here]()
Любая помощь очень приветствуется!
Ответы
Ответ 1
Из графа Facebook APIv2.4 нам нужно явно указать поля для получения.
Представляем Graph API v2.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'],
},
Ответ 2
У вас есть часть обратного вызова кода, правильно?:
app.get('/oauth/facebook/callback', passport.authenticate('facebook', {
failureRedirect: '/login',
successRedirect: '/',
scope:['email']
}));
И да, действительно, это должно быть сделано с помощью scope:['email']
в соответствии с инструкциями из вашей ссылки и этой здесь также.
Ответ 3
Вам необходимо указать область действия: "электронная почта". Смотрите приведенный ниже код.
Маршрут аутентификации 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
}))