如何将数据从Facebook应用程序传递到我的服务器(通过Ajax)?

时间:2011-08-07 03:08:39

标签: ajax facebook facebook-php-sdk

(由于Facebook不推荐使用FBML和FBJS,我无法使用这些方法将数据传递到我的服务器。)

我有一个 IFRAME facebook应用程序,主要用于页面。

当页面管理员访问其页面中的我的应用程序选项卡时,他们会看到一个设置页面,用于添加有关其页面的信息。我也有一个提交按钮。一旦页面管理员提交有关其页面的信息,它将被发送到我的服务器,它将与页面ID一起存储。完成此设置后,当其他用户访问页面中的此应用程序选项卡时,他们将看到页面管理员发布的信息。

我在服务器端使用 Facebook的PHP SDK 来解码已签名的请求并获取页面ID。

以下是我的应用程序的index.php中的代码将数据发送到我的服务器 (连同用户输入,页面ID也将被传递,此处未显示)

function sendData() {
    $.post('ajax.php', {
        data : $("#userdata").val()
    }, function(data) {
        alert(data);
    });
}
</script>

以下是简单的ajax.php脚本。这只是一个测试脚本。

<?php
echo "<pre>" . print_r($_POST) . "</pre>";
?>

问题是只有用户数据被发送到服务器。这种方法存在安全问题。我想发送'signed_request'(Facebook最初发送到我的index.php,使用我验证请求)以及用户数据,因此我可以从服务器端验证请求并更新正确页面的信息。否则,任何人都可以发布这样的请求并更新任何页面的信息。

firebug image

1 个答案:

答案 0 :(得分:1)

您需要做的就是在服务器端ajax脚本中使用Facebook PHP SDK,然后您可以检查该请求是由具有授权您的应用的有效Facebook会话的人发送的。

如果您担心多个使用您的应用程序的人会尝试发送虚假请求来改变彼此的页面设置,那么您只需要存储一些关于哪些Facebook ID与他们管理的Facebook页面相关联的信息。

例如,在将请求发送到服务器时,发送页面ID以及从页面ID派生的加密密钥(在显示自身时将此加密密钥保留在隐藏字段中)。在服务器中,解密此密钥以与页面ID匹配。通过这种方式,您可以确保页面管理员仅修改“他们的”页面的信息。