Стратегия Passport Facebook возвращает неопределенные значения
Я использую плагин passport-facebook в приложении NextJS, и мой тестовый скрипт определяет стратегию, как показано ниже:
// Configure Passport
// ---------------------------------------------------------------
passport.use(new LocalStrategy(User.authenticate()));
passport.use(new FacebookStrategy({
clientID: process.env.FACEBOOK_APP_ID,
clientSecret: process.env.FACEBOOK_APP_SECRET,
callbackURL: process.env.FACEBOOK_APP_CALLBACK,
},
function (accessToken, refreshToken, profile, done) {
console.log(profile);
}
));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
// ---------------------------------------------------------------
Мои маршруты аутентификации:
// Facebook
router.get('/auth/facebook', passport.authenticate('facebook'));
router.get('/facebook/callback',
passport.authenticate('facebook', {
successRedirect: '/success',
failureRedirect: '/failure',
}),
);
Все, что я сейчас пытаюсь сделать, это отобразить все значения, возвращенные Facebook после успешной аутентификации. Аутентификация работает, как и ожидалось, но Facebook, похоже, возвращается undefined
для большинства ключей в profile
объект:
{ id: '1234567812345677',
username: undefined,
displayName: 'John Doe',
name:
{ familyName: undefined,
givenName: undefined,
middleName: undefined },
gender: undefined,
profileUrl: undefined,
provider: 'facebook',
_raw: '{"name":"John Doe","id":"1234567812345677"}',
_json: { name: 'John Doe', id: '1234567812345677' } }
Все, что я получаю, это displayName
а также id
; все остальное undefined
, Что не так? Очень похожий вопрос был задан здесь ранее, но ни один из предложенных ответов (не принятых ответов) не решает проблему.
1 ответ
У меня нет опыта в этой области, но, глядя на readme в Facebook-паспорте, кажется, что вам нужно использовать profileFields
в вашем FacebookStrategy
,:
Профиль Facebook содержит много информации о пользователе. По умолчанию не все поля в профиле возвращаются. Поля, необходимые приложению, можно указать, установив опцию profileFields.
new FacebookStrategy({ clientID: FACEBOOK_APP_ID, clientSecret: FACEBOOK_APP_SECRET, callbackURL: "http://localhost:3000/auth/facebook/callback", profileFields: ['id', 'displayName', 'photos', 'email'] }), ...)
Обратитесь к разделу User Справочника по API Graph для получения полного набора доступных полей.