我正在将 Facebook 登录集成到 iOS 应用程序中。该应用程序依赖于用 PHP 编写的 API,目前将其用于默认登录过程(电子邮件和密码)。 我已成功添加 Facebook SDK 并使用它从 Facebook 检索用户数据,但我陷入了这个安全问题:如果我相信来自应用程序的数据是真实的 Facebook 用户数据,有人可以开始发送 API 端点一些 Ajax 调用,在最好的情况下,虚假用户会扰乱我的数据库(因为我通过 Facebook 登录过程添加新用户)。
我正在考虑以下解决方案:从 iOS 获取用户数据以在本地使用,除了用户的 Facebook ID 之外什么都不发送到服务器。由于两个 SDK 都应该将数据存储在 cookie 中,因此我应该能够从服务器检索当前登录的用户数据,并根据来自应用程序的用户 ID 检查用户 ID。如果一切匹配,我可以使用我检索到的服务器端的任何数据将新用户添加到数据库(或简单地让他登录),并且相同的数据应该出现在客户端。
问题是,在服务器端,我总是从 $facebook->getUser() 方法调用中得到 0。我可能错过了一些东西。想法?
PS > 当我使用具有相同 PHP Api 的 Javascript SDK 时,会发生类似的问题,但前提是 Javascript 应用程序在本地计算机上运行。如果它在我的临时服务器上运行,一切正常。 编辑:这与域名有关。
编辑2:我没有放置任何代码,但您可以假设最简单的示例:
$fb = new Facebook(array(
"addId" => "myAppId",
"secret" => "myAppSecret",
"cookie" => true
));
$user = $fb->getUser(); // Returns 0
最佳答案
我找到了一个可以接受的解决方案(即使不是最优的恕我直言)。
我没有向我的 API 提供用户的 Facebook ID,而是向它提供访问 token ,这是我通过 iOS 应用程序中的 [session.accessTokenData accessToken]
调用获得的。
在 PHP 方面,我只调用 $facebook->setAccessToken($token)
以便对 $facebook->api()
的任何后续调用进行身份验证。如果身份验证 token 有效,则一切正常;如果不是,则会抛出一个错误,这正是应该发生的事情。
重要提示:如果您想这样做,请不要忘记使用从应用程序到服务器的安全连接!
关于php - Facebook 登录客户端和服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19478089/