Я работаю над созданием Face Book OAuth для входа пользователя на мой сайт. Я получаю объект обратно из Facebook с информацией о FB, но в этом ответе профиля нет никаких сообщений электронной почты.Не получать электронную почту от Facebook OAuth API, паспорт со стеком MEAN
Когда я нажимаю кнопку «Войти в Facebook» на моей странице, она берет меня в Facebook и говорит, что для приложения потребуется мой профиль и адрес электронной почты, поскольку я добавил электронное письмо в объем моих вещей. Вот мой код:
конфигурации/routes.js:
app.get('/auth/facebook', passport.authenticate('facebook', {scope:['email']}));
app.get('/auth/facebook/callback',
passport.authenticate('facebook',
{ successRedirect: '/confirm_community',
failureRedirect: '/signin' }));
============== passport.js
passport.use(new FacebookStrategy({
// pull in our app id and secret from our auth.js file
clientID : configAuth.facebookAuth.clientID,
clientSecret : configAuth.facebookAuth.clientSecret,
callbackURL : configAuth.facebookAuth.callbackURL
},
function(accessToken, refreshToken, profile, done) {
process.nextTick(function() {
console.log(profile);
// console.log(profile.emails[0].value);
User.findOne({'facebook.id':profile.id}, function (error, result){
if(error){
return done(error);
}
if(user) {
return done(null, user);
}
else {
var newUser = new User();
newUser.facebook.id = profile.id;
newUser.facebook.token = accessToken;
newUser.facebook.name = profile.displayName;
newUser.facebook.email = profile.emails[0].value;
newUser.save(function (error){
if(error){
console.log(error);
throw error;
} else {
return done(null, newUser);
}
});
}
});
});
}));
Вот это объект FB я вернусь, когда я console.log (профиль) в функции process.nextTick с ответом ФБ:
{ id: 'my id is coming back here',
username: undefined, (because I don't have one)
displayName: 'my name is coming back here',
name:
{ familyName: undefined, (I don't have any of these in my profile)
givenName: undefined,
middleName: undefined },
gender: undefined,
profileUrl: undefined,
provider: 'facebook',
_raw: '{"name":"my name is coming here","id":"my id is coming here"}',
_json: { name: 'my name is coming here', id: 'my id is coming here' } }
Я удостоверился, моя электронная почта це c и войдите в Facebook, как правило, с моей электронной почтой и паролем, поэтому я не использую мобильный телефон для входа в Facebook. Я просто пропустил этот адрес электронной почты. Я не могу понять, почему этот объект не возвращает мне электронное письмо? Что мне не хватает? Помощь очень ценится.
Спасибо за ответ. У меня теперь есть это: app.get ('/ auth/facebook/me? Fields = name, email', passport.authenticate ('facebook', {scope: ['email']})); но я получаю сообщение об ошибке «Can not GET/auth/facebook» при нажатии кнопки «Войти с Facebook» ..... мне нужно что-нибудь подобное в моей кнопке FB -scope = «email, user_birthday, user_about_me» ..? Или мне нужно будет удалить приложение и создать новый с этим изменением? – bschmitty
, который является странной конечной точкой api, которую вы пытаетесь использовать ... сначала убедитесь, что вы авторизуетесь, а затем используйте конечную точку/me отдельно. и убедитесь, что знаете, как работает вход в facebook: https://developers.facebook.com/docs/facebook-login/v2.4 – luschn
Да, я понял, что использовал это неправильно. В Документах FB говорится о «Шагах по использованию входа в Facebook с помощью SDK для JavaScript», но это похоже на совершенно другой подход, чем тот, который я использую. Я предполагаю, что я делаю это нормально, так как я, по крайней мере, возвращаю объект FB. Возможно, это неверно. Когда вы сначала авторизуетесь, ссылаетесь ли вы на их авторизацию с помощью FB и моего приложения, и как только ответ вернется, используйте конечную точку/me в функции process.nextTick? Спасибо еще раз за помощь. – bschmitty