在PHP SDK中使用getUser获取用户ID时遇到问题

时间:2012-10-24 21:28:40

标签: wordpress facebook-php-sdk facebook-authorization

我很难让Facebook PHP SDK与Wordpress插件一起使用,我试图在其中修复登录流程。我遇到的问题是getUser()总是返回0,即使用户肯定有登录。基本上,我的代码工作原理如下:

  1. 我有一个选项页面(在wordpress中),当它被加载时,会创建一个包装类的实例,如下所示:PHP SDK Facebook类:

    $facebook = new FacebookAPI;
    

    这个包装器的构造函数创建了一个PHP SDK Facebook类的实例并保存它,同时还设置了一些类变量并做了一些工作来管理插件中保存的会话。

  2. 然后在选项页面中有一个按钮,它是指向Facebook对象生成的login_url的链接,即getLoginUrl()。使用包装类:

    以这种方式调用登录Url
    // Set Login Url
    $params = array(
        'scope' => 'user_photos,user_photo_video_tags',
        'redirect_uri' => FB_REDIRECT_URI,
        'display' => 'page'
    );
    $loginURL = $facebook->get_login_url($params);
    
  3. 这里的redirect_uri是wordpress中的插件选项页面,当重新加载页面时,会有代码检查登录过程是否已经完成。它通过查看url是否包含'code'变量来完成此操作,即如果设置了$ _REQUEST ['code']。 (这是FB成功完成登录/权限过程时所做的事情。

  4. 问题: 如果在请求对象中设置了'code',我想我应该能够在facebook sdk类上调用getUser()并获取用户ID。这是我遇到问题的地方。 getUser()总是返回0,我无法找出原因。

    然而,我注意到的一件事是,如果我执行var_dump($ _ SESSION),则数组为空。在PHP错误日志中,我有以下PHP警告:

    PHP Warning:  session_start(): Cannot send session cookie - headers already sent by (output started at /****/****/Sites/ld-full/wp-admin/menu-header.php:92) in /****/****/Sites/ld-full/wp-content/plugins/fotobook/facebook-platform/facebook.php on line 49
    PHP Warning:  session_start(): Cannot send session cache limiter - headers already sent (output started at /****/****/Sites/ld-full/wp-admin/menu-header.php:92) in /****/****/Sites/ld-full/wp-content/plugins/fotobook/facebook-platform/facebook.php on line 49
    

    menu-header.php中的第92行如下:

    echo "\n\t<div class='wp-menu-image'><a href='{$submenu_items[0][2]}' aria-label='$aria_label'>$img</a></div>$arrow<a href='{$submenu_items[0][2]}'$class $aria_attributes>$title</a>";
    

    我在这里看不到任何会写标题的内容。所以我在这一点上很难过。

    有没有人对这里可能发生的事情有任何想法?任何帮助都绝对是太棒了。

1 个答案:

答案 0 :(得分:1)

  

问题:如果在请求对象中设置了'code',我想我应该能够在facebook sdk类上调用getUser()并获取用户ID。

不。代码参数的目的是交换访问令牌。

  

有代码检查登录过程是否已完成。它通过查看url是否包含'code'变量来完成此操作,即如果设置了$ _REQUEST ['code']。 (这是FB成功完成登录/许可过程时所做的事情。

获取代码参数意味着授权已经完成 - 必须首先执行上述步骤。

  

在PHP错误日志中,我有以下PHP警告:

     

PHP警告:session_start():无法发送会话cookie - 已经由[...]发送的标题

Ppppleeeaaaaseee 研究自己的错误信息 - 它已在网上进行过多次讨论和解释,而不是人们可能在明确的背景下搜索帕丽斯·希尔顿......