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

Тема в разделе "PHP", создана пользователем casinolot, 5 июл 2012.

Модераторы: latteo
  1. casinolot

    casinolot

    Регистр.:
    22 окт 2010
    Сообщения:
    548
    Симпатии:
    84
    Беру, пример с фейсбука, но почему-то мне возвращается 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.");
    }
     
  2. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
  3. casinolot

    casinolot

    Регистр.:
    22 окт 2010
    Сообщения:
    548
    Симпатии:
    84
  4. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    Суппорт Твиттера ответил:
    Что означает, что email не возможно получить с помощью Twitter Api. Если он вам так нужен - попросите об этом юзера :)

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

    casinolot

    Регистр.:
    22 окт 2010
    Сообщения:
    548
    Симпатии:
    84
    Про такой вариант ,я знаю, так скорее всего и буду делать. Еще вопрос по фейсбуку, как мне теперь разлогинить пользователя,
    нажимаю по ссылки
    $logoutUrl = $facebook->getLogoutUrl();
    сам пользователь из фейсбука вываливается, но моя связь остается с его аккаунтом и я его данные получаю через $user = $facebook->getUser();
    <-------------- добавлено через 29 сек. -------------->
    может надо токены удалять или есть стандарнтый метод фейсбука
     
  6. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    метод getLogoutUrl возвращает вам ссылку, при клике на которую вы убиваете сессию фейсбука.
    В зависимости от того, как устроена ваша авторизация в связке с фейсбуком, скорее всего у вас хранится ещё и сессия конкретно вашего ресурса. Вам надо чистить и её.
    В метод getLogoutUrl можно передать параметр вида
    PHP:
    array( 'next' => 'https://www.yoursite.com/after_logout' )
    - это урл, на который будет перекинут юзер после "убийства" сессии фейсбука. На этом урле вы сможете очистить куки/сессию юзера на вашем сайте, чтобы окончательно его деавторизовать, после чего уже перенаправите его куда захотите обычным php редиректом, например, на главную страницу сайта.
     
  7. casinolot

    casinolot

    Регистр.:
    22 окт 2010
    Сообщения:
    548
    Симпатии:
    84
    вот какие я убиваю
    $_SESSION['fb_APPLICATIONID_code']=null;
    $_SESSION['fb_APPLICATIONID_access_token']=null;
    $_SESSION['fb_APPLICATIONID_user_id']=null

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