2012-08-23 57 views
0

我有PHP級與Facebook API的工作:Facebook登錄/註銷/檢查用戶支持PHP-SDK

class Social { 
    private $name; 
    private $context; 
    private $tocken; 

    public function check(){ 
    $this->tocken = $this->context->getAccessToken(); // get current tocken 
    if (isset($_SESSION['fb_tocken']) AND !empty($_SESSION['fb_tocken'])){ 
     // session tocken not null 
     if ($_SESSION['fb_tocken'] == $this->tocken){ 
      // session tocken = current tocken 
      // update last active 
      return true; 
     } elseif ($this->tocken == APPLICATION_TOCKEN) { 
      // current tocken == default tocken 
      $this->logout(); 
     } else { 
      // current tocken <> default tocken 
      $this->logout(); 
     } 
    } else { 
     // session tocken is null 
     if ($this->tocken == APPLICATION_TOCKEN){ 
      // current tocken is default 
      return false; 
     } else { 
      // current tocken is not default 
      if ($this->getUserInfo()){ 
      // user registered - login action 
      if ($this->login()) 
       return true; 
      else 
       return false; 
      } else { 
      // register new user 
      if ($this->register()){ 
       if ($this->login()){ 
        return true; 
       } else 
        return false; 
      } else 
       return false; 
      } 
     } 
    } 
    } 
    // ... 
}; 

如果用戶使用alogritm:

1 - 登錄了Facebook 2 - 來自Facebook 4註銷 - - 在應用 3登錄登錄facebook中 5 - 開放應用

應用問題:

第五步後我的應用程序無法授權用戶。但是如果用戶按'刷新',他就會被授權。

+0

@Roddie I'am修改此類,現在它可以工作。但是有一個問題 - IE x - Iframe中沒有保存cookie。如何克服這種行爲? –

回答

0

這是正確的behviour - 但如果沒有代碼的其餘部分(即抓取令牌的位)不可能確認。

會發生什麼情況是當用戶註銷時,當前令牌(您存儲在會話中)變得無效。用戶重新登錄到Facebook,您需要獲得新的令牌,而這不會自動發生 - 但是當您執行刷新時,我認爲您的代碼getAccessToken()(以上未顯示)將獲取新令牌。

最簡單的解決方法是在Javascript中添加一個監聽器用於登錄和註銷。你可以找到details here,你需要auth.login處理程序。觸發後,只需刷新頁面即可。

還有其他一些使用Javascript的選項可以將新令牌泵送到可以在幕後更新會話的PHP偵聽器。

+0

Robbie $ this-> tocken = $ this-> context-> getAccessToken(); //獲取當前的答案 –

+0

事件(auth.login)//不能在Internet Explorer XX中工作...... –

+0

您需要調試剩下的代碼然後 - 這在IE中運行得很好,所以您還有其他東西停止運行JavaScript腳本,或者你的刷新指令是錯誤的。但是我們不能在沒有看到代碼的情況下多說。 – Robbie