【问题标题】:How to pass data from a facebook app to my server (via Ajax)?如何将数据从 facebook 应用程序传递到我的服务器(通过 Ajax)?
【发布时间】:2011-08-07 03:08:39
【问题描述】:

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

我有一个 IFRAME facebook 应用程序,主要是为页面使用而构建的。

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

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

以下是我的应用程序的index.php中的代码,用于向我的服务器发送数据 (随着用户输入,页面ID也会被传递,这里不显示) em>

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,我使用它来验证请求)连同用户数据,所以我可以验证来自服务器端的请求并更新正确页面的信息。否则,任何人都可以发布这样的请求并更新任何页面的信息。

【问题讨论】:

  • 您不需要发送signed_request 来验证表单输入,您需要发送CSRF 令牌。请注意,如果您使用 php-sdk,signed_request 在会话中无论如何都应该在服务器上。

标签: ajax facebook facebook-php-sdk


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多