2012-06-20 4 views
-2

사용자가 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"]; 
관련 문제