Подтвердить что ты не робот

Регистрация в Facebook иногда не предоставляет адрес электронной почты

Я использую Register with Facebook как один из способов входа в мое веб-приложение и прямо запрашиваю разрешение "электронной почты".

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

4b9b3361

Ответ 1

Просто догадаться...

В документации на facebook говорится:

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

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

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

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

Ответ 2

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

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

Ответ 3

Попытка:

// 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 (у всех есть это письмо): "[email protected]".

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

Ответ 4

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

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

/USER/permissions

Ответ 5

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

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

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

Спасибо

Ответ 6

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

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