我可以通过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);
}));};
Run Code Online (Sandbox Code Playgroud)
但是,我无法在"个人资料"中看到个人资料图片.
文档https://github.com/jaredhanson/passport-facebook说要检索我们需要传递profileFields的照片,如下所示.但是这样做,我能够看到照片网址,但却丢失了_json中包含的其他数据,例如profile._json.location.name.如何检索包含其他用户信息的照片?
passport.use(new FacebookStrategy({
// clientID, …Run Code Online (Sandbox Code Playgroud) 我正试图在iOS Facebook SDK应用程序上使用passport-facebook实现服务器facebook身份验证,我不清楚如何在后端设置护照身份验证.
基本上iOS客户端使用Facebook进行身份验证并获取sessionToken,我想将其传递给passport-facebook/auth/facebook/callback以使用FB验证会话令牌,并通过node.js从我们的数据库中查找用户.
这是使用passport-facebook的正确方法,还是需要call/auth/facebook(我需要传递什么参数).
这个问题提到使用Facebook iOS SDK构建应用程序,然后在服务器上进行身份验证,但没有提到具体如何做到这一点.
https://github.com/jaredhanson/passport-facebook/issues/7
我还可以编写自己的自定义护照策略,简单地传递FB会话令牌,我可以验证服务器上的FB图形API以获取FB用户ID并验证它是有效会话,如下所述: 设计用于Facebook身份验证也可以访问安全Web服务的iOS应用程序