可能很明显也很简单。我有一个应用程序,应该访问Facebook用户的朋友信息。用户使用PassportJS进行身份验证后,我的应用程序收到了accessstoken,如何获取用户朋友信息?或者任何受保护的信息是什么?用户朋友访问的范围参数是什么?
修改 只是想提一下原来的问题没有得到真正的回答,但答案足以让我继续我的调查。
我的解决方案是使用PassportJS来管理登录流程,当我收到accessToken时,我将它用于我的Facebook Graph API调用,这非常容易。我将对我的模块进行一些返工,然后将它发布到GitHub上以便按原样使用。
答案 0 :(得分:1)
为了修改范围,您可以在设置Facebook策略路线时执行此操作。
例如,如果我希望用户的电子邮件成为我的范围的一部分,那么我的内容将如下所示:
app.get('/auth/facebook', passport.authenticate('facebook', { scope: 'email' }));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { successRedirect: '/',
failureRedirect: '/' }));
我使用Mongoose将我的信息保存到MongoDB,但您可以轻松地将他们的朋友放在req.user中。以下是我如何映射我的Facebook用户数据的示例:
passport.use(new FacebookStrategy({
clientID: Common.conf.fb.appId,
clientSecret: Common.conf.fb.appSecret,
callbackURL: Common.conf.site_url + "/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
Model.User.findOne({uid: profile.id}, function(err, user) {
if (err) { return done(err); }
if (user) { done(null, user); } else {
var user_data = {
provider: profile.provider
, alias: profile.username
, email: profile.emails[0].value
, uid: profile.id
, created: new Date().getTime()
, name: {
first: profile.name.givenName
, last: profile.name.familyName
}
, alerts: {
email: true
, mobile: false
, features: true
}
};
new Model.User(user_data).save(function(err, user) {
if(err) { throw err; }
done(null, user);
});
}
});
}
));
有时候放一个console.log(profile)会很有帮助:
function(accessToken, refreshToken, profile, done) {
console.log(profile);
为了帮助您查看Facebook API为您提供的原始输出,并检查您的自定义范围变量是否存在。