我正在使用PHP库用于图谱API(http://github.com/facebook/php-sdk),但我对它是如何工作(或不工作)感到有点困惑。
我只想验证用户身份并获取用户ID。我真正想知道的是一旦用户登录Facebook并返回我的网站该怎么办。 URL中有称为“会话”的数据。是否需要存储以便不断获取用户ID?对我来说,从样本或(缺乏)文档来看,这真的不明显。
此外,完全删除PHP库并仅处理响应更容易,将其存储在会话变量中。如果我这样做,获取/提取当前用户ID的最佳方法是什么?
编辑:
目前,我已经从GitHub复制了facebook.php文件和example.php文件,并且只更改了example.php中的应用程序名称和密码。它不存储cookie并且说“你没有连接”。但是,当我print_r($session);
它有效时(但只有当网址包含会话数据时)。
还有其他人遇到过这样的问题吗?是否有可能在localhost上运行导致此问题?
编辑:
我将完全相同的两个文件上传到主机,它运行良好。它存储了cookie并显示了它应该的所有信息。很可能在localhost上运行会导致问题。我已经更改了Facebook Developer应用程序的Connect选项卡下的设置,但仍然没有运气。
任何人都知道如何从localhost或我做错了什么?
答案 0 :(得分:5)
URL中有称为“会话”的数据。是否需要存储以便不断获取用户ID?
是的,它需要存储,但Facebook类会解析它并将其存储在cookie中。
此外,完全删除PHP库并自己处理响应更容易,将其存储在会话变量中。
facebook.php 中提供的Facebook
类不需要使用API,但为您提供了一些便利,例如将常用URL放在一起,解析会话数据(这是发送到URL然后存储在cookie中),将错误消息(带有“错误”键的JSON对象)转换为PHP异常等。
所以,简而言之,不,切断PHP库并不容易,因为你最终写的基本相同。
从示例中可以看出,他们通过调用$uid
来获取用户ID(getUser
):
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}
$ uid只是一个整数,$me
是当前用户的数据(听起来你不需要)。通过调用:
$me = $facebook->api('/' . $uid); //Generates https://graph.facebook.com/[uid]
我现在遇到的问题是,Facebook类(makeRequest
方法)中的curl函数由于某种原因返回NO内容。因此,$me
最终没有任何结果,这使得示例仍然说“你没有连接”。但是,如果要输出$uid
,你会看到它确实包含当前用户的ID。
答案 1 :(得分:1)
私有函数setCookieFromSession($ session = null)
失败,因为$ domain参数是emtpy。我正在使用它进行本地测试:
if ($domain != '') {
setcookie($cookieName, $value, $expires, '/', '.' . $domain);
} else {
setcookie($cookieName, $value, $expires, '/');
}
答案 2 :(得分:0)
您是否从github查看了最新版本的facebook.php? 最新版本考虑了魔术引号,因此将返回会话而不是null。
答案 3 :(得分:0)
有一件事有助于检查来自Facebook的响应标题有时(很少)它们可以提供信息。
我发现您需要调用/ oauth / authorize(带有查询参数)来授权网站/应用程序,以便Facebook为您提供访问令牌。
答案 4 :(得分:-1)
我认为您可以使用此http://3aroundweb.in/facebook-connect-using-graph-api/它包含实用指南和工作代码下载:)