Паспорт Facebook Аутентификация возвращается Не определено? - PullRequest
0 голосов
/ 04 мая 2018

Моя стратегия на фейсбуке следующая:

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 (профиль) запускается, но выводит неопределенное, даже если пользователь принимает разрешение? Я искал документацию и не могу понять, где я ошибся.

1 Ответ

0 голосов
/ 04 мая 2018

Кажется, проблема с passReqToCallback. См. Этот вопрос SO: Используя PassportJS, как передать дополнительные поля формы в стратегию локальной аутентификации?

В вашем случае удалите флаг 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
}
...