2011-09-09 58 views
5

我試圖在我的控制器中發佈一個相冊到Facebook的功能。每次訪問函數時,我都會重定向到REDIRECT_URI,就好像$ userid = 0,即使我剛剛正確登錄到Facebook。這是因爲登錄後,它重新啓動該功能,並創建一個新的Facebook會話,消滅我剛剛得到的用戶?功能的Facebook身份驗證 - getUser()返回0

感謝您提供的任何幫助。

function share($id){ 
      if (!$id) { $this->Session->setFlash(__('Invalid id for Album', true)); 
      $this->redirect(array('action'=>'index')); } 
      $photos = $this->Album->find('all', array('conditions' => array('Album.id' => $id))); 


      $facebook = new Facebook(array('appId'=>'valid aphid', 'secret'=>'valid secret')); 
      $facebook->setFileUploadSupport(true); 
      $userid = $facebook->getUser(); 

      if($userid) {    
       try { 
         $user_profile = $facebook->api('/me'); // Gets User's information based on permissions the user has granted to your application. 

       } 
       catch(FacebookApiException $e){ 
        error_log($e); 
        // Print results if you want to debug. 
        $userid = null; 
       } 

      } else { 

       $login_url = $facebook->getLoginUrl($params = array('redirect_uri' => REDIRECT_URI,'scope' => PERMISSIONS_REQUIRED)); 
       echo ("<script> top.location.href='".$login_url."'</script>"); 
      } 

      //Create album 
      $results = $facebook->api('me/albums', 'post', $photos[0]['Album']['name']);//->photos_createAlbum($albumname, '', '', 'everyone', $this->_userid); 

     } 
+0

[爲什麼Facebook PHP SDK getUser總是返回0?](http://stackoverflow.com/questions/6790272/why-is-facebook-php-sdk-getuser-always-returning-0) –

回答

4

默認情況下,Facebook類使用PHP sessions來存儲用戶的身份驗證狀態。有可以使用的4個會話變量:

  • fb_{appid}_user_id:Facebook的用戶ID
  • fb_{appid}_code:需要訪問令牌要交換授權碼
  • fb_{appid}_access_token:可用於訪問令牌以使API調用
  • fb_{appid}_state:CSRF令牌

檢查你的PHP會話配置和正常工作。

  • 默認情況下,cookie名稱爲PHPSESSID;你應該看到在瀏覽器中設置。
  • 如果您在多個服務器之間進行負載平衡,您將需要一個解決方案,讓您在這些服務器之間共享會話狀態。
  • 在開始會話之前,您不能輸出任何文本(如果需要實例化Facebook對象時需要自動完成)。你可能想嘗試把這個作爲你的函數的第一行:

    if (!session_id()) { session_start(); } 
    
2

我有我的Facebook應用程序完全相同的問題,我終於想通了後發2天拉挫折。原來是getLoginUrl()中的redirect-uri問題!如果它不匹配通過Facebook註冊的應用程序域,他們返回錯誤,並將用戶返回爲0(默認用戶值)

0

我發現redirect-uri必須實例化Facebook類並調用getUser(),因爲從Facebook返回的「代碼」有一些魔力(正如PCheese指出的那樣)。

所以要澄清,它沒有好重新導向至loggedin.html,你需要重定向到loggedin.php並調用

$facebook = new Facebook(array(
    'appId' => 'yourAppID', 
    'secret' => 'yourSecret', 
)); 

$user = $facebook->getUser(); 

,將設置爲用戶正確的會話變量。

而且,這裏是Facebook上的頁面說明的全過程,以及如何爲一個訪問令牌交換「代碼」,如果你不使用thier PHP類,http://developers.facebook.com/docs/howtos/login/server-side-login/(第六步)

0

我真的不能解釋它爲什麼會起作用,但是當我遇到getUser()總是返回0的問題時,我在頁面中包含了Javascript SDK。然後它就工作了。也許你可以嘗試,如果這也能解決你的問題