如何通过php或javascript从facebook身份验证示例获取用户电子邮件

时间:2012-03-01 05:32:46

标签: php javascript facebook facebook-graph-api facebook-fql

我的网站上有一个照片库,我想要Facebook认证才能查看并收集姓名/电子邮件地址。到目前为止,我已经[这里] [1],并读到我尝试了php示例,但我很困惑如何在验证时获取用户名/电子邮件?我使用了这个,但在示例中为什么“代码”是空的,我如何得到用户的信息,就像在示例中获取“状态”一样。同样在我的版本中,它只是触发重定向,示例中的第二个条件从未遇到过?

示例:

 <?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 个答案:

答案 0 :(得分:3)

要获取用户电子邮件,您需要提供所需的权限,例如电子邮件(more

试试这个..

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>";        
}

Download Package

答案 1 :(得分:1)

重新阅读authentication docs以及OAuth上的一些教程。

如果您app_idapp_secretmy_url设置正确,重定向将转到facebook.com授权页面,并授权应用通过以下方式访问您的数据您将被重定向到的API code非空。