Регистрация на Facebook иногда не обеспечивает электронную почту - PullRequest
19 голосов
/ 19 февраля 2012

Я использую «Регистрация на Facebook» в качестве одного из способов входа в свое веб-приложение и прямо запрашиваю разрешение «электронная почта».

При входе некоторые пользовательские данные ($facebook->api('/me')) сохраняется в базе данных пользователей, однако иногда поле электронной почты просто не существует - это общая проблема?

Ответы [ 6 ]

31 голосов
/ 22 августа 2013

Просто предположение ...

В документации на фейсбуке написано:

примечание: это поле не будет возвращено, если для пользователя нет действительного адреса электронной почты

Источник: https://developers.facebook.com/docs/reference/api/user/

Поэтому, когда адрес электронной почты становится недействительным (например, пользователи, которые годами не пользовались Facebook и с тех пор уничтожили / изменили свой адрес электронной почты), Facebook может прекратить возвращать это поле.

5% неверного адреса может показаться большим, но если я проверю своих друзей в Facebook, я думаю, что более 5% из них никогда не используют свой аккаунт, и я не удивлюсь, если адрес, который они использовали при входе в систему, теперь недействительно.

4 голосов
/ 20 февраля 2012

Пользователи не всегда должны предоставлять адрес электронной почты, чтобы использовать Facebook. Они также могут зарегистрироваться через SMS, хотя это гораздо реже.

Короче говоря, у FB не всегда будет адрес электронной почты, поэтому он не может быть использован в вашем приложении.

2 голосов
/ 17 августа 2013

Попробуйте:

// Just to make sure email are permitted
//$facebook->getLoginUrl(array('req_perms' => 'email'))

// Request email
FB.api('/me?scope=email', function(response) { /*...*/ });

Или:

$email = $facebook->api('user_id?fields=email');

ПРОБЛЕМЫ:

  • Пользовательизменил видимость его адреса электронной почты на «только я», и поэтому у вас нет возможности его получить.
  • Пользователь зарегистрировался с помощью SMS вместо электронной почты, как упоминалось в предыдущем ответе.

АЛЬТЕРНАТИВА:

Если вам абсолютно необходимо связаться с пользователем, но вы не можете получить его адрес электронной почты, вы все равно можете получить его адрес электронной почты Facebook (у всех есть этот адрес): "user_name @ facebook.com ".

Если пользователь использует POP-сервер, он напрямую получит электронное письмо в GMail или других, а если нет, то получит ваше электронное письмо как личное сообщение.Единственным недостатком этого метода является то, что ваша электронная почта должна быть "обычная / текстовая", а не "HTML".

1 голос
/ 17 августа 2013

Одна вещь Users don't always have to provide an email address in order to use Facebook(could have registered through mobile) - как упомянуто Колм.Помимо этого -

Пожалуйста, убедитесь, что если пользователь определенно предоставил вам расширенное разрешение email или оно не было впоследствии отозвано.Чтобы проверить это, вы можете использовать разрешения api-

/USER/permissions
0 голосов
/ 11 декабря 2017

В дополнение к тому, что написал @Jigar Jain выше, пользователи могут на самом деле снять отметку с разрешения электронной почты во время притока знака. В этом случае его / ее адрес электронной почты не будет возвращен Facebook.

Вы должны реализовать логику, которая делает вход в систему неудачным, если пользователь снимает галочку с разрешения электронной почты, чтобы заставить ваших пользователей выбрать другой метод входа, который будет гарантировать возврат адреса электронной почты пользователя.

0 голосов
/ 03 октября 2013

У меня была похожая проблема, и я нашел причину для этого.Эта проблема возникает у пользователей, которые не установили свой Основной адрес электронной почты (у них много адресов электронной почты, но они не указали, какой у них основной адрес электронной почты) на вкладке Общие настройки учетной записи.

Я пытался использовать такие учетные записина различных известных сайтах, где есть логин на Facebook, и даже они не могут получить адрес электронной почты из таких учетных записей.

Итак, проблема не в коде (при условии, что вы запросили разрешения).Мы просто должны обработать такие сценарии и сообщить пользователям, что мы не получили их адрес электронной почты.Как и Klout.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...