我很难让 Facebook PHP SDK 与我正在尝试修复登录流程的 Wordpress 插件一起使用。我遇到的问题是 getUser()总是返回 0 即使肯定有用户登录。基本上,我的代码工作如下:
我有一个选项页面(在 wordpress 中),当它被加载时会创建一个包装类的实例,或者 PHP SDK Facebook 类的实例,如下所示:
$facebook = new FacebookAPI;
此包装器的构造函数创建 PHP SDK Facebook 类的实例并保存它,同时还设置一些类变量并做一些工作来管理保存在插件中的会话。
然后在选项页面中有一个按钮,它是一个指向由 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);
这里的 redirect_uri 是 wordpress 中的插件选项页面,当页面重新加载时,有代码检查登录过程是否正常完成。它通过查看url 是否包含'code' 变量来做到这一点,即是否设置了$_REQUEST['code']。(这是 FB 在成功完成登录/权限过程时所做的。
问题: 如果在请求对象中设置了“代码”,我想我应该能够在 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>";
我在这里看不到任何会写标题的东西。所以我在这一点上相当难过。
有人对这里可能发生的事情有任何想法吗?任何帮助都会非常棒。