我在NextJS应用中使用Passport-Face Book插件,我的测试脚本定义了以下策略:
// 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似乎正在返回profile
对象中的大多数键的undefined
:
{ 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
。怎么了?以前在这里提出了一个非常类似的问题,但没有一个答案(没有接受答案)提供了问题。
我没有在这方面的经验,但是从查看Facebook-passport的读数中,听起来您需要在FacebookStrategy
中使用profileFields
。:
Facebook个人资料包含有关用户的大量信息。 默认情况下,并不是返回配置文件中的所有字段。田野 应用程序需要通过设置配置文件来指示 选项。
new FacebookStrategy({ clientID: FACEBOOK_APP_ID, clientSecret: FACEBOOK_APP_SECRET, callbackURL: "http://localhost:3000/auth/facebook/callback", profileFields: ['id', 'displayName', 'photos', 'email'] }), ...)
请参阅图API参考的用户部分以进行完整 一组可用字段。