2012-06-20 53 views
-2

我試圖讓用戶通過Facebook在我的web應用程序上註冊。作爲我正常註冊的一部分,用戶必須提供他們的電子郵件地址,我需要將其作爲Facebook註冊的一部分。在註冊時獲取Facebook用戶電子郵件

我使用下面的代碼,它能正常工作,除非它不返回用戶電子郵件地址作爲Facebook響應的一部分。我知道我需要專門「詢問」電子郵件,但我很困惑我在下面的代碼中在何處/如何執行此操作?

我也知道用戶可能會選擇不提供他們的電子郵件地址作爲過程的一部分,但我能夠處理。

// Grab our facebook details 
    $app_id = $this->config->item('fb_app_id'); 
    $app_secret = $this->config->item('fb_secret_key'); 
    $my_url = $this->config->item('fb_url'); 

    session_start(); 

    if(isset($_REQUEST["code"])) 
    { 
     $code = $_REQUEST["code"]; 
    } 
    else 
    { 
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
     $dialog_url = "https://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 ((isset($_REQUEST['state'])) && (($_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)); 
     if (! empty($user)) 
     { 
          // NO EMAIL HERE?! 
      $email = strtolower($user->email); 


     } 
    } 

回答

2

看起來像這個問題之前已經問過。答案可以在這裏找到:

Facebook Graph API, how to get users email?

+0

謝謝 - 我看到了 - 但我很困惑在上面我的代碼中包含'範圍'電子郵件的地方?我會再看看... – Laurence

+1

$ dialog_url =「https://www.facebook.com/dialog/oauth?scope=email&client_id=」 –

+0

感謝您的幫助 - 這工作 – Laurence

0

此代碼對我的作品...希望它會爲你也運作良好

定義( 'FACEBOOK_APP_ID', 'YOUR_APP_ID_HERE') ; define('FACEBOOK_SECRET','YOUR_APP_SECRET_HERE');

 // No need to change function body 
     function parse_signed_request($signed_request, $secret) { 
      list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

      // decode the data 
      $sig = base64_url_decode($encoded_sig); 
      $data = json_decode(base64_url_decode($payload), true); 

      if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
       error_log('Unknown algorithm. Expected HMAC-SHA256'); 
       return null; 
      } 

      // check sig 
      $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
      if ($sig !== $expected_sig) { 
       error_log('Bad Signed JSON signature!'); 
       return null; 
      } 

      return $data; 
     } 

     function base64_url_decode($input) { 
      return base64_decode(strtr($input, '-_', '+/')); 
     } 

     if ($_REQUEST) { 
      $response = parse_signed_request($_REQUEST['signed_request'], 
          FACEBOOK_SECRET); 
      /* 
      echo "<pre>"; 
      print_r($response); 
      echo "</pre>"; // Uncomment this for printing the response Array 
      */ 

      $email = $response["registration"]["email"]; 
相關問題