我使用的护照Facebook的插件和我的测试脚本定义的策略如下:护照Facebook的策略在NextJS应用程序返回undefined值
// 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
。出了什么问题?之前在这里提出了一个非常类似的问题,但没有一个答案(没有被接受的答案)提供了解决问题的方法。
完成guess-检查您的应用范围。您可能没有完整的个人资料信息的权限。 –
我没有为我的认证调用指定任何明确的'范围'。不应该像* username *那样可以作为默认范围的一部分?我在网上遇到的所有教程(包括PassportJS文档)都会指示您指定一个范围,以便您需要任何其他访问权限,例如时间线等。 – TheLearner
您是否找到了解决方案?我得到了同样的问题:/ –