Facebook 登录客户端和服务器端



我正在将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,而是向它提供访问令牌,这是我通过iOS应用程序中的[session.accessTokenData accessToken]调用获得的。

在 PHP 端,我只是调用 $facebook->setAccessToken($token),以便对 $facebook->api() 的任何后续调用都经过身份验证。如果身份验证令牌有效,则一切正常;如果没有,则会抛出错误,这正是应该发生的事情。

重要提示:如果您想这样做,请不要忘记使用从应用程序到服务器的安全连接!

最新更新