我在NextJS应用程序中使用passport-facebook插件,我的测试脚本定义了如下策略:
// 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
。出了什么问题?之前在这里提出了一个非常类似的问题,但没有一个答案(没有接受的答案)解决了这个问题。
答案 0 :(得分:0)
我没有这个领域的经验,但是通过查看facebook-passport的readme,听起来你需要使用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'] }), ...)
有关完整内容,请参阅Graph API参考的“用户”部分 可用字段集。