使用passport-facebook从Facebook上检索照片

我可以通过passport-facebook获取基本的用户信息,按照下面的代码保存在mongodb中:

app.get("/auth/facebook", passport.authenticate("facebook", { scope : ["email", "publish_stream", "user_location", "user_hometown", "user_birthday", "read_friendlists"]})); app.get("/auth/facebook/callback", passport.authenticate("facebook",{ successRedirect: '/', failureRedirect: '/'})); var mongoose = require('mongoose'), FacebookStrategy = require('passport-facebook').Strategy, Users = mongoose.model('Users'); module.exports = function (passport, config) { passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { Users.findOne({ _id: id }, function (err, user) { done(err, user); }); }); passport.use(new FacebookStrategy({ clientID: config.facebook.clientID, clientSecret: config.facebook.clientSecret, callbackURL: config.facebook.callbackURL }, function(accessToken, refreshToken, profile, done) { Users.findOrCreateFaceBookUser(profile, done); }));}; 

但是,我无法在“个人资料”中看到个人资料图片。

文档https://github.com/jaredhanson/passport-facebook说要检索我们需要传递profileFields的照片,如下所示。 但是这样做,我可以看到照片URL,但是丢失了_json中包含的其他数据,例如profile._json.location.name。 我如何检索与其他用户信息完好的照片?

 passport.use(new FacebookStrategy({ // clientID, clientSecret and callbackURL profileFields: ['id', 'displayName', 'photos', ....]},// verify callback)); 

如果你需要一个更大的图像(默认miksii上面的例子是50px x 50px这是非常小的),然后使用:

 profileFields: ['id', 'displayName', 'name', 'gender', 'picture.type(large)'] 

接着

 picture: profile.photos ? profile.photos[0].value : '/img/faces/unknown-user-pic.jpg' 

这将为该用户返回一个200px x 200px的configuration文件图片。

除了回答你的问题 – 你不必这样做。 正如您所提到的,您可以为Facebookconfiguration文件定义所需的属性:

  clientID: "...", clientSecret: "...", callbackURL: "...", profileFields: ['id', 'displayName', 'name', 'gender', ..., 'photos'] 

你能做的只是简单地抓住给定属性的值。 假设你想创build一个属性来保存这个值:

 picture: profile.photos ? profile.photos[0].value : '/img/faces/unknown-user-pic.jpg' 

这被certificate是一个更好的解决scheme,因为有些用户或者有时用户名的价值可能是未定义的。

我希望你也觉得这个有用,

谢谢。

是的,图片可以通过使用访问令牌的graphicsapi来访问。 “graph.facebook.com/”; + profile.username +“/ picture”+“?width = 200&height = 200”+“&access_token =”+ accessToken; 没有必要使用configuration文件字段。