2012-03-28 153 views
0

我目前正在製作一個Facebook應用程序,並遇到一些權限問題。我需要每個用戶的許可,以使用那裏的位置和那裏的朋友位置。我的代碼已經在過去工作,但最近似乎已停止工作。假定我的app_id和app_namespace被聲明瞭。發生的所有事情是我重定向到if(empty($ code))塊中的dialog_url,但就我所知,$ code不應該爲空。任何幫助將不勝感激。謝謝。Facebook的請求權限和身份驗證

require_once('sdk/src/facebook.php'); 
require_once('AppInfo.php'); 
require_once('utils.php'); 
require_once('connection.php'); 

$facebook = new Facebook(array(
'appId' => AppInfo::appID(), 
'secret' => AppInfo::appSecret(), 
)); 

$user_id = $facebook->getUser(); 
     if(user has ran the app before) 
    { 


     mysql_close($connection); 

     session_start(); 

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

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

    } 
    else 
    { 

     mysql_close($connection); 

     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) . "&scope= user_location, friends_location, offline_access" . "&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."); 
     } 
    } 

回答

0

看起來很簡單,但是您的oauth url中有空格,您已將其分配給$ dialog_url?