2010-12-19 66 views
2

我厭倦了挖掘大量的教程/文件,這根本沒有幫助我。Facebook的PHP SDK - 需要登錄特定的帳戶

我有什麼現在(一切都被置於管理控制面板內):

  1. 如果用戶登錄正確的帳戶(具有授予的權限頁的管理員),一切工作正常,後頁上張貼假冒的網站。
  2. 如果他登錄了其他帳戶,則什麼都不會發生。網站將他重定向到他的牆上。
  3. 如果他沒有在任何帳戶登錄,他重定向到Facebook登錄 - 如果他登錄到正確的帳戶,他返回到ACP(它是壞的解決方案,因爲它會清除他的形式)

我要實現:

  1. 如果登錄了,一切都因爲它是
  2. 與登錄到特定的(正確的)佔

目前我ü否則彈出只唱PHP,但JS解決方案是允許的。

我的代碼:

<?php 
/*(...)*/ 
$facebook = new Facebook(array(
     'appId' => $apiid, 
     'secret' => $secret, 
     'cookie' => true, 
    )); 

    $session = $facebook->getSession(); 
    $me = null; 
    if ($session) { 
     try { 
      $uid = $facebook->getUser(); 
      $me = $facebook->api('/me'); 
     } catch (FacebookApiException $e) { 
      error_log($e); 
     } 

     if($me) { 


      //In order to post to the page later on we need to generate an Access Token for that page, to do this we get me-accounts in the following api call 
      $accounts = $facebook->api('/me/accounts'); 

      //Loop through the array off accounts to find the page with a matching ID to the one we need 
      foreach($accounts['data'] as $account){ 
       if($account['id'] == PAGEID){ 
       $ACCESS_TOKEN = $account['access_token']; 
       } 
      } 
     } 

     $message=$data['facebook_text']; 
     $attachment = array(
      'message' => $data['facebook_text'], 
      'name' => $data['name'], 
      'description' => '', 
      'link'=>$someurl, 
      'access_token' => $ACCESS_TOKEN 
     ); 
     if($image_url != NULL) $attachment['picture'] = $image_url; 

     try { 
      if($facebook->api('/PAGEID/feed', 'post', $attachment)) 
      { 
       //other stuff 
      } 
     } catch (FacebookApiException $e) { 
      error_log($e); 
      //other stuff 
     } 
    } 
    else 
    { 
     $login_url = $facebook->getLoginUrl(); 
     header("Location: $login_url"); 
     exit; 
    } 
/* (...) */ 
?> 

解決方案不能在任何地方重定向,因爲它裏面的形式,讓所有data'll丟失。

+0

你是什麼意思的頁面管理員? Facebook頁面?如果他登錄到另一個帳戶(Facebook帳戶?),並且您的代碼沒有任何跡象表明它會將他重定向到他的Facebook頁面! 請詳細說明......並提供更多代碼 – ifaour 2010-12-19 02:54:00

回答

0

我真的不知道我理解你想在這裏做什麼,但是這是我在類似情況下使用:

$session = $this->get_admin_session_of_page ($page_id); 
$session = unserialize ($session); 
$facebook->setSession ($session, false); 

在Facebook的PHP SDK有手動設置的方法會話,setSession。我使用序列化將分頁管理用戶會話保存在數據庫中,並具有離線訪問和管理頁面權限。然後,當您需要應用程序的某些管理員權限時,您只需對其進行反序列化,然後使用setSession。第二個參數設置爲FALSE,以便該會話不保存在cookie中並註銷當前用戶。

這樣,登錄的人並不重要,工作總是作爲頁面的管理員完成。我認爲這可以安全地用於自動化腳本中,例如,在頁面相冊中上傳用戶照片。 當然,如果涉及更多,或者實現自己的安全性,則必須謹慎對待。