我可以通过 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/