我很难让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成功完成登录/权限过程时所做的事情。
问题: 如果在请求对象中设置了'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>";
我在这里看不到任何会写标题的内容。所以我在这一点上很难过。
有没有人对这里可能发生的事情有任何想法?任何帮助都绝对是太棒了。
答案 0 :(得分:1)
问题:如果在请求对象中设置了'code',我想我应该能够在facebook sdk类上调用getUser()并获取用户ID。
不。代码参数的目的是交换访问令牌。
有代码检查登录过程是否已完成。它通过查看url是否包含'code'变量来完成此操作,即如果设置了$ _REQUEST ['code']。 (这是FB成功完成登录/许可过程时所做的事情。
获取代码参数不意味着授权已经完成 - 必须首先执行上述步骤。
在PHP错误日志中,我有以下PHP警告:
PHP警告:session_start():无法发送会话cookie - 已经由[...]发送的标题
Ppppleeeaaaaseee 研究自己的错误信息 - 它已在网上进行过多次讨论和解释,而不是人们可能在明确的背景下搜索帕丽斯·希尔顿......