2011-12-15 3 views
0

나는 사용자가 자신의 FB 계정을 통해 인증 할 수 있음을 원하고, 내가 그들의 데모 스크립트 시도 :페이스 북 데모 스크립트 문제

$app_id = "*****"; 
$app_secret = "*****"; 
$my_url = "http://localhost/fb/fb.php"; 

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); 
echo "$user->name"; 
} 
else { 
echo("The state does not match. You may be a victim of CSRF."); 

}

문제는 그런 성공적인 로그인 후 단지 "안녕하세요" 문자열이 표시되지만 $ user-> name은 표시되지 않습니다.

+0

dialog_url을 https : //로 변경하려고 시도하십시오. oauth2.0은 https (oauth2 사양에 따라)를 통해서만 작동해야합니다. – Rufinus

답변

4

비록 이것이 공식 FB 코드 (처음에는 미안하다는 것을 깨닫지 못했다.)가 잘못되었다는 것을 알기 위해 그것을 디버깅 할 것을 권한다.

  • Activate error reporting
  • 모든 통화의 앞에 @ 제거는 - 그것은
  • 봐 무엇 주소 $graph_url 포함 오류의 출력을 억제하고 당신은 당신의 브라우저에서
  • 볼에 액세스 할 수 있는지 여부를 여부를 호출 $graph_url가 작동합니다 (결과 출력)
  • json_decode()이 작동하는지 확인하십시오 (결과 출력)

글로벌 또는 Facebook 문제인 경우 데모 코드의 문제점을 Facebook에 알릴 필요가 있습니다.