Facebook PHP SDK - 需要登录特定帐户

时间:2010-12-19 00:35:00

标签: php javascript facebook

我厌倦了挖掘大量的帮助我的教程/文档。

我现在拥有的东西(一切都放在管理员控制面板内):

  1. 如果用户登录了正确的帐户(具有授予权限的页面的管理员),一切正常,页面上的帖子将作为模拟站点发布。
  2. 如果他登录其他帐户,则不会发生任何事情。网站将他重定向到他的墙上。
  3. 如果他没有登录任何帐户,他会被重定向到facebook登录 - 如果他登录到正确的帐户,他会返回acp(这是一个糟糕的解决方案,因为它会清除他的表格)
  4. 我想实现:

    1. 如果已登录,则一切都是
    2. 其他弹出窗口,登录到特定(正确)帐户
    3. 目前我只使用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;
          }
      /* (...) */
      ?>
      

      解决方案无法在任何地方重定向,因为它是内部形式,因此所有数据都将丢失。

1 个答案:

答案 0 :(得分:0)

我不确定我明白你想在这里做什么,但这是我在类似情况下使用的:

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

在facebook php SDK中有一种手动设置会话的方法setSession。我使用serialize将页面管理用户会话保存在DB中,具有脱机访问和管理页面权限。然后,当您需要应用程序的某些管理员权限时,您只需将其反序列化,然后使用setSession。第二个参数设置为FALSE,因此该会话不会保存在cookie中并注销当前用户。

这样登录的人并不重要,工作总是作为页面的管理员完成。我认为在自动脚本中使用是安全的,例如在页面相册中上传用户照片。 当然,如果它涉及到更多涉及,或者实现自己的安全性,则必须谨慎使用它。