Получение email авторизированного пользователя Facebook

casinolot

Гуру форума
Регистрация
21 Окт 2010
Сообщения
547
Реакции
87
Беру, пример с фейсбука, но почему-то мне возвращается json данных только без email, какой-то урезанный, может надо задавать требуемые доступы, чтобы пользователь открывал?
PHP:
<?php

session_start();
$code = $_REQUEST["code"];

$req_perms='email';
if(empty($code)) {


$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
$dialog_url = "[URL]http://www.facebook.com/dialog/oauth?client_id=[/URL]"

. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="

. $_SESSION['state'];

echo("<script> top.location.href='" . $dialog_url . "'</script>");

}


if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['state'])) {

$token_url = "[URL]https://graph.facebook.com/oauth/access_token?[/URL]"

. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)

. "&client_secret=" . $app_secret . "&code=" . $code."&req_perms=".$req_perms;


$response = file_get_contents($token_url);

$params = null;

parse_str($response, $params);


$graph_url = "[URL]https://graph.facebook.com/me?access_token=[/URL]"

. $params['access_token'];

$user = json_decode(file_get_contents($graph_url));
echo("Hello " . $user->name);
print_r($user);
}

else {
echo("The state does not match. You may be a victim of CSRF.");
}
 
Суппорт Твиттера ответил:
Email addresses are not available through the Twitter API. If you need a user's email address, just ask for it.
Что означает, что email не возможно получить с помощью Twitter Api. Если он вам так нужен - попросите об этом юзера :)

Обычно в тех соц-сетях, которые не предоставляют email при юзании их API, на сайте принято выводить всплывающее окошко с просьбой ввести email для окончания регистрации.
 
Суппорт Твиттера ответил:

Что означает, что email не возможно получить с помощью Twitter Api. Если он вам так нужен - попросите об этом юзера :)

Обычно в тех соц-сетях, которые не предоставляют email при юзании их API, на сайте принято выводить всплывающее окошко с просьбой ввести email для окончания регистрации.
Про такой вариант ,я знаю, так скорее всего и буду делать. Еще вопрос по фейсбуку, как мне теперь разлогинить пользователя,
нажимаю по ссылки
$logoutUrl = $facebook->getLogoutUrl();
сам пользователь из фейсбука вываливается, но моя связь остается с его аккаунтом и я его данные получаю через $user = $facebook->getUser();
<-------------- добавлено через 29 сек. -------------->
Про такой вариант ,я знаю, так скорее всего и буду делать. Еще вопрос по фейсбуку, как мне теперь разлогинить пользователя,
нажимаю по ссылки
$logoutUrl = $facebook->getLogoutUrl();
сам пользователь из фейсбука вываливается, но моя связь остается с его аккаунтом и я его данные получаю через $user = $facebook->getUser();
может надо токены удалять или есть стандарнтый метод фейсбука
 
метод getLogoutUrl возвращает вам ссылку, при клике на которую вы убиваете сессию фейсбука.
В зависимости от того, как устроена ваша авторизация в связке с фейсбуком, скорее всего у вас хранится ещё и сессия конкретно вашего ресурса. Вам надо чистить и её.
В метод getLogoutUrl можно передать параметр вида
PHP:
array( 'next' => 'https://www.yoursite.com/after_logout' )
- это урл, на который будет перекинут юзер после "убийства" сессии фейсбука. На этом урле вы сможете очистить куки/сессию юзера на вашем сайте, чтобы окончательно его деавторизовать, после чего уже перенаправите его куда захотите обычным php редиректом, например, на главную страницу сайта.
 
вот какие я убиваю
$_SESSION['fb_APPLICATIONID_code']=null;
$_SESSION['fb_APPLICATIONID_access_token']=null;
$_SESSION['fb_APPLICATIONID_user_id']=null

надо убивать все или только некоторые?
 
Назад
Сверху