Паспорт узла Facebook не возвращает адрес электронной почты
Привет люди, которых я искал в нескольких местах также здесь
134 Ключ электронной почты не возвращается при попытке аутентификации пользователя https://github.com/jaredhanson/passport-facebook/issues/134
Я вставлю стандартный паспорт код Facebook. Я также указал поля профиля. Проблема в том, что запрос к FB не получает адрес электронной почты пользователя, что важно для моего приложения.
// Load the module dependencies
var passport = require('passport'),
url = require('url'),
FacebookStrategy = require('passport-facebook').Strategy,
config = require('../config'),
users = require('../../app/controllers/users.server.controller');
// Create the Facebook strategy configuration method
module.exports = function() {
// Use the Passport's Facebook strategy
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
profileFields: ["id", "birthday", "email", "first_name", "gender", "last_name"],
passReqToCallback: true
},
function(req, accessToken, refreshToken, profile, done) {
// Set the user's provider data and include tokens
var providerData = profile._json;
providerData.accessToken = accessToken;
providerData.refreshToken = refreshToken;
console.log(profile);
var email = profile.emails ? profile.emails[0].value : 'karl.something@something.com';
// Create the user OAuth profile
var providerUserProfile = {
firstName: profile.name.givenName,
lastName: profile.name.familyName,
fullName: this.firstName + ' ' + this.lastName,
email: email,
username: profile.username,
provider: 'facebook',
providerId: profile.id,
providerData: providerData
};
// Save the user OAuth profile
users.saveOAuthUserProfile(req, providerUserProfile, done);
}
));
};
Здесь вы можете увидеть вывод console.log(profile):
{ id: '894894191844',
username: undefined,
displayName: undefined,
name: { familyName: 'Something', givenName: 'Karl', middleName: undefined },
gender: 'male',
profileUrl: undefined,
provider: 'facebook',
_raw: '{"id":"1197051993654521","first_name":"Karl","gender":"male","last_name":"Something"}',
_json:
{ id: '1197051993654521',
first_name: 'Karl',
gender: 'male',
last_name: 'Koks',
accessToken: 'XYZ',
refreshToken: undefined } }
Любые конкретные идеи, хотел бы исправить эту проблему в ближайшее время:-)
2 ответа
Возможно, не единственное решение, но у меня сработало следующее:
от
passport.authenticate('facebook');
в
passport.authenticate('facebook', { scope: 'email'}));
тогда поля электронной почты будут заполнены
Ответ найден здесь: passport-facebook - не могу получить about_me и поля профиля электронной почты
Моя конфигурация идентична, за исключением того, что в profileFields я использую электронные письма (множественное число), а не электронную почту.
// configure route
app.get('/auth/facebook', passport.authenticate('facebook', {
scope: [ "email" ]
}));
// configure passport
passport.use(facebook(callback));
// configure strategy
export default (callback) => new FacebookStrategy({
clientID: config.auth.facebook.clientID,
clientSecret: config.auth.facebook.clientSecret,
callbackURL: config.auth.facebook.callbackURL,
passReqToCallback: true,
enableProof: true,
profileFields: ['id', 'emails', 'name', 'gender', 'displayName']
}, callback);