Facebook Graph API, как получить электронную почту пользователей?
Я использую API-интерфейс Graph, но я не могу понять, как получить зарегистрированный адрес электронной почты пользователей.
Вступление к графику: "API-интерфейс Graph предоставляет доступ ко всем основным данным регистрации учетной записи, которые вы обычно запрашиваете в форме регистрации для вашего сайта, включая имя, адрес электронной почты, изображение профиля и день рождения"
Все хорошо и хорошо, но как мне получить доступ к этой информации?
Это то, что у меня есть до сих пор:
$json = $facebook->api('/me');
$first = $json['first_name']; // gets first name
$last = $json['last_name'];
Ответы
Ответ 1
Единственный способ получить адрес электронной почты пользователей - запросить расширенные разрешения в поле электронной почты. Пользователь должен разрешить вам видеть это, и вы не можете получить адреса электронной почты друзей пользователя.
http://developers.facebook.com/docs/authentication/permissions
Вы можете сделать это, если используете Facebook-соединение, передав scope = email в строке получения вашего вызова в диалоговое окно Auth.
Я рекомендую использовать SDK вместо file_get_contents, так как он намного упрощает выполнение Oauth.
Ответ 2
// Facebook SDK v5 for PHP
// https://developers.facebook.com/docs/php/gettingstarted/5.0.0
$fb = new Facebook\Facebook([
'app_id' => '{app-id}',
'app_secret' => '{app-secret}',
'default_graph_version' => 'v2.4',
]);
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
$response = $fb->get('/me?locale=en_US&fields=name,email');
$userNode = $response->getGraphUser();
var_dump(
$userNode->getField('email'), $userNode['email']
);
Ответ 3
Откройте base_facebook.php
Добавьте Access_token в функцию getLoginUrl()
array_merge(array(
'access_token' => $this->getAccessToken(),
'client_id' => $this->getAppId(),
'redirect_uri' => $currentUrl, // possibly overwritten
'state' => $this->state),
$params);
и Область использования для разрешения электронной почты
if ($user) {
echo $logoutUrl = $facebook->getLogoutUrl();
} else {
echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream'));
}
Ответ 4
Чтобы получить адрес электронной почты пользователя, вы должны войти в систему с помощью своей учетной записи Facebook, используя разрешение email
. Используйте для этого PHP SDK для Facebook (см. В github) следующим образом.
Сначала проверьте, не был ли пользователь уже зарегистрирован:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$user = null;
}
}
Если он его нет, вы можете отобразить ссылку для входа, запрашивающую разрешение email
:
if (!$user) {
$args = array('scope' => 'email');
echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>';
} else {
echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>';
}
Когда он зарегистрирован в электронной почте, можно найти в массиве $user_profile
.
Надеюсь, что это поможет!
Ответ 5
Вы можете получить адрес электронной почты из зарегистрированного профиля пользователя. Вот фрагмент кода
<?php
$facebook = new Facebook(array(
'appId' => $initMe["appId"],
'secret' => $initMe["appSecret"],
));
$facebook->setAccessToken($initMe["accessToken"]);
$user = $facebook->getUser();
if ($user) {
$user_profile = $facebook->api('/me');
print_r($user_profile["email"]);
}
?>
Ответ 6
Просто добавьте эти блоки кода при возврате статуса и начните передавать объект строки запроса {}. Для разработчиков JavaScript
После инициализации вашего SDK.
шаг 1://получить статус входа
$(document).ready(function($) {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
console.log(response);
});
});
Это будет проверять загрузку документа и проверять состояние входа в систему, если пользователи вошли в систему.
Затем вызывается функция checkLoginState, и ответ передается в statusChangeCallback
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
Шаг 2. Позволяет получать данные ответов из состояния
function statusChangeCallback(response) {
// body...
if(response.status === 'connected'){
// setElements(true);
let userId = response.authResponse.userID;
// console.log(userId);
console.log('login');
getUserInfo(userId);
}else{
// setElements(false);
console.log('not logged in !');
}
}
Здесь также есть идентификатор пользователя, для которого задана переменная, затем вызывается функция getUserInfo для получения информации о пользователе с помощью Graph-api.
function getUserInfo(userId) {
// body...
FB.api(
'/'+userId+'/?fields=id,name,email',
'GET',
{},
function(response) {
// Insert your code here
// console.log(response);
let email = response.email;
loginViaEmail(email);
}
);
}
После передачи идентификатора пользователя в качестве аргумента функция затем извлекает всю информацию, относящуюся к этому идентификатору пользователя. Примечание: в моем случае я искал электронное письмо, чтобы позволить мне запустить функцию, которая может регистрировать пользователя только по электронной почте.
//войти по электронной почте
function loginViaEmail(email) {
// body...
let token = '{{ csrf_token() }}';
let data = {
_token:token,
email:email
}
$.ajax({
url: '/login/via/email',
type: 'POST',
dataType: 'json',
data: data,
success: function(data){
console.log(data);
if(data.status == 'success'){
window.location.href = '/dashboard';
}
if(data.status == 'info'){
window.location.href = '/create-account';
}
},
error: function(data){
console.log('Error logging in via email !');
// alert('Fail to send login request !');
}
});
}
Ответ 7
https://graph.facebook.com/me
предоставит вам информацию о текущем входе в систему, но вам нужно будет указать токен oauth. См:
http://developers.facebook.com/docs/reference/api/user
Ответ 8
Электронная почта в профиле может быть получена с использованием расширенного разрешения, но я думаю, что невозможно получить электронное письмо, используемое для входа в fb. В моем приложении мне захотелось отобразить mulitple fb-учетные записи пользователя в списке, я хотел показать учетные записи электронной почты учетных записей fb как уникальный идентификатор соответствующих учетных записей, но я не мог получить его с fb, все, что я получил, было основной адрес электронной почты в профиле пользователя, но в моем случае мой адрес электронной почты для входа и мое основное электронное письмо отличаются.
Ответ 9
Убедитесь, что ваше приложение Facebook опубликовано. Чтобы получать данные для электронной почты, public_profile и user_friends, ваше приложение должно быть доступно для общественности.
Вы можете отключить его позже для целей разработки и по-прежнему получать поле электронной почты.
Ответ 10
В процессе разработки могут быть полезны следующие инструменты:
Отладчик токена доступа: вставьте в токен доступа подробные сведения
https://developers.facebook.com/tools/debug/accesstoken/
Проводник API Графа: тестовые запросы к графику api после вставки в токен доступа
https://developers.facebook.com/tools/explorer
Ответ 11
Обязательно укажите номер версии API как нечто вроде "v2.11"
, а не "2.11"
Я не уверен, что он по умолчанию, если это неверно, но я получил некоторые нечетные ошибки, пытаясь просто получить электронную почту, когда я пропустил v
.
Ответ 12
Предполагая, что вы запросили разрешения электронной почты, когда пользователь вошел в ваше приложение и у вас есть действительный токен,
С помощью fetch api вы можете просто
const token = "some_valid_token";
const response = await fetch(
'https://graph.facebook.com/me?fields=email&access_token=${token}'
);
const result = await response.json();
результатом будет:
{
"id": "some_id",
"email": "[email protected]"
}
идентификатор будет возвращен в любом случае.
Вы можете добавить в поля запроса параметры еще больше, но вам нужны разрешения для них, если они не находятся в общедоступном профиле (имя общедоступно).
?fields=name,email,user_birthday&token=
https://developers.facebook.com/docs/facebook-login/permissions