node.js - 使用 passport-facebook 从 Facebook 检索照片

标签 node.js express passport.js passport-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'

这将为该用户返回 200 像素 x 200 像素的个人资料图片。

关于node.js - 使用 passport-facebook 从 Facebook 检索照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20039953/

相关文章:

javascript - 如何排序导致 nodejs - mongodb 搜索,但是,通过调用动态方法

node.js - 如何使用 Node/Passport 获取用户的 LDAP OU?

javascript - Passport 与 Express 4

node.js - Sequelize 方言错误

JavaScript (Node.js) : app. 设置 ('port' ,端口); ^ TypeError : app. set 不是一个函数

node.js - 使用 AWS api 网关将图像文件上传到 aws lambda

node.js - NodeJS 路由的动态参数

node.js - NodeJs 数组中的项变量仅采用 for 循环中的第一个值

php - node.js MySQL 性能

javascript - .call(this) JavaScript 中的习语