$ facebook-> getUser();仍然返回0
我看到这已经被问了很多这里,但我还没有拿出一个解决方案。我需要获取用户的ID以确定他们是否已经在我的应用中填写了表单。这是我的代码..
require_once('facebook.php');
$facebook = new Facebook(array(
'appId' => 'xxxxxxxxxx',
'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'cookie' => false,
));
$signed_request = $facebook->getSignedRequest();
$page_id = "fb" . $signed_request['page']['id'];
$user_id = $facebook->getUser();
我不知道这是否相关,但我可以抓住页面编号就好了。但$user_id
对于除我以外的所有用户始终返回0。我猜这是因为我是我的页面的管理员。
有人知道问题在这里吗?
我也有这个问题,唯一的解决办法是使用oauth之前与许可请求 “user_about_me”。由于FB使用OAuth 2.0,用户最值是隐藏的,您有权要求 这一切的sh * T :(
我的猜测是,大部分与$facebook->getUser()
所报告的问题都涉及到内置于Facebook的PHP CSRF (Cross Site Request Forgery)保护SDK和实施起来有些不太合适
CSRF保护所做的是确保获取用户数据的请求需要来自同一台服务器,它通过在会话中存储随机散列来实现。 getUser()没有这个值设置,getUser()将总是返回0.
所以用户需要先访问你的站点,一个CS RF令牌将被生成并存储在会话和仅在以下请求可以成功调用的getUser()
如果你看看PHP SDK源代码,你会注意到的方式来产生这CSRF令牌是调用一个名为establishCSRFTokenState()
的受保护方法。调用$facebook->getLoginUrl(...)
的时候,所以你不能从外部调用该方法,它被调用的唯一方法是,可以修改SDK源来改变这种行为(或使establishCSRFTokenState()
公用)或只需调用getLoginUrl(...)
当用户第一次访问您的网站。确保您已启用会话支持。
我认为这不是很好设计,记录更糟。在大多数情况下,除非人们了解如何正确使用它,否则无法保护网站免受CSRF攻击。