Как получить электронную почту пользователя из примера аутентификации facebook через php или javascript - PullRequest
0 голосов
/ 01 марта 2012

У меня есть фотогалерея на моем веб-сайте, и я хочу требовать авторизацию на Facebook, чтобы просматривать ее и собирать имена / адреса электронной почты. До сих пор я пошел [здесь] [1] и прочитал, что я попробовал пример php, который работал, но я не понимаю, как получить имя пользователя / адрес электронной почты при аутентификации? Я использовал это, но в примере почему «код» будет пустым, и как я могу получить информацию о пользователе, например, как в этом примере он получает «состояние». Также в моей версии он просто отключает перенаправление, почему в примере 2-е условие никогда не выполняется?

Пример:

 <?php 

   $app_id = "YOUR_APP_ID";
   $app_secret = "YOUR_APP_SECRET";
   $my_url = "YOUR_URL";

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

   if(empty($code)) {
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
     $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
       . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
       . $_SESSION['state'];

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

   if($_REQUEST['state'] == $_SESSION['state']) {
     $token_url = "https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
       . "&client_secret=" . $app_secret . "&code=" . $code;

     $response = @file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);

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

     $user = json_decode(file_get_contents($graph_url));
     echo("Hello " . $user->name);
   }
   else {
     echo("The state does not match. You may be a victim of CSRF.");
   }

 ?>

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

Для получения электронной почты пользователя вам необходимо дать необходимое разрешение, например, электронная почта ( больше )

Попробуйте это ..

require_once "facebook.php";

$facebook = new Facebook(array('appId'  => '[YOUR_APP_ID]', 'secret' => '[YOUR_SEC_ID]'));  

$user_fb = $facebook->getUser();

if($user_fb == 0)
{
    $user_fb = $facebook->getUser();
}

if ($user_fb) // Check user's FB user ID has getting or not
{   
    $user_profile = $facebook->api('/me'); 

    $logoutUrl = $facebook->getLogoutUrl(); 

    echo $user_profile['email'];
    echo $user_profile['first_name'];
    echo $user_profile['last_name'];            
 }

else // user's FB user ID has not getting load login url with email permission
{     
     $perms = array('scope' => 'email');
     $loginUrl = $facebook->getLoginUrl($perms);        
     echo "<script> top.location.href='" . $loginUrl . "'</script>";        
}

Скачать пакет

1 голос
/ 01 марта 2012

Перечитайте документы по аутентификации и, возможно, некоторые учебники по OAuth.

Когда вы правильно настроите app_id, app_secret и my_url, перенаправление приведет вас на страницу авторизации facebook.com, и после авторизации приложения для доступа к вашим данным через API вы будете перенаправлены обратно с code не пустым.

...