passeport-facebook - cant get about_me et e-mail les champs du profil
Je suis en train d'établir un système de connexion pour mon application à l'aide de passeport, de facebook.
tout va bien sauf pour les 2 champs qui obtiennent pas défini de retour de la demande.
Je vais poster mon code entier de la procédure de connexion, puisque je n'ai pas vu beaucoup d'infos à ce sujet ici même si il y a beaucoup de question en la matière.
c'est la configuration dans app.js
var passport = require('passport');
var FacebookStrategy = require('passport-facebook').Strategy;
passport.serializeUser(function(user, done) {
done(null, user.facebookId);
});
passport.deserializeUser(function(id, done) {
routes.findUserById(id, function(err, user) {
done(err, user);
});
});
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: FACEBOOK_CALLBACK_URL,
profileFields: ['id', 'displayName', 'link', 'about_me', 'photos', 'email']
},
routes.handleLogin
));
à l'aide de passeport initialiser la session et de l'
app.use(passport.initialize());
app.use(passport.session());
réel traitement de la demande, un avis, je suis en utilisant la bonne portée
app.get('/auth/facebook', passport.authenticate('facebook', { scope: ['user_about_me', 'email'] }));
app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/', failureRedirect: '/error' }));
et c'est mon utilisateur en fonction de création dans le routeur
exports.handleLogin = function(accessToken, refreshToken, profile, done) {
db.userCatalog.findOne({ facebookId: profile.id }, function(err, existingUser) {
if (err) {
return done(err);
}
else {
if(existingUser) {
console.log('User: ' + existingUser.name + ' found and logged in!');
done(null, existingUser);
}
else {
new db.userCatalog({
name: profile.displayName,
facebookId: profile.id,
link: profile.link,
picture: profile.photos[0].value,
bio: profile.about_me,
email: profile.email
}).save(function (err, data) {
if (err) {
return done(err);
}
else {
console.log('New user: ' + data + ' created and logged in!');
done(null, data);
}
});
}
}
});
};
et le résultat lors de la création d'un nouvel utilisateur après avoir terminé la procédure de connexion:
Je suis sûr que c'est une erreur de débutant, mais je ne peux pas le comprendre moi-même...
- le champ profil, je suis à l'aide sont fondées sur le Facebook FQL référence: developers.facebook.com/docs/reference/fql
- voir ma réponse stackoverflow.com/a/43160929/842386
Vous devez vous connecter pour publier un commentaire.
Facebook retourne quelques attributs par défaut. Si vous souhaitez accéder à plus de détails sur la fiche client vous devez le déclarer en vertu de la
FacebookStrategy
:Donc, une fois que vous déclarez les attributs que vous souhaitez recevoir de la part de Facebook, quand quelqu'un essaie de se connecter à votre système, il sera demandé de partager ses photos ou des e-mails avec vous/votre application. Une fois qu'il approuve ce que vous pouvez accéder à ses valeurs:
Pour les e-mails, il est parfois utile de changer:
À ceci:
Dans le profileFields vous shoul utiliser les e-mails (plular) au lieu de e-mail (au singulier):
Ce qui est noté dans l'facebook-passeport documentation README.md:
Et vous pouvez trouver Portable Contacts conventions pour passportjs ici