【问题标题】:facebook js signed_requestfacebook js 签名请求
【发布时间】:2013-05-04 15:10:39
【问题描述】:

我正在使用 Facebook js 来允许用户登录。 js 上的登录部分运行良好,但我想捕获 Facebook 发送的签名请求(使用服务器端语言,如 php 或 java)。阅读他们关于如何捕获 signed_requests 的文档 (https://developers.facebook.com/docs/facebook-login/using-login-with-games/) 并没有提供太多信息。他们声明“签名的请求是通过 HTTP POST 发送到设置为您的 Canvas URL 的 URL”,所以我转到了我的确切 url(mywebsitenamehere.com/login.php,我将其声明为我的 Canvas URL 并添加了代码来捕获POST['signed_request'] (我假设就是这样,因为我在 Facebook 上找不到任何地方告诉你变量的名称)。问题是什么也没发生,我在 login.php 页面中添加了一些代码来简单如果为测试目的设置了 POST 变量,则重定向到另一个网站,但没有任何反应。我真的很感激我应该做的一个具体例子。在互联网上搜索我能够找到一些例子,但这是人使用 php 进行登录,但我使用的是 JS。

【问题讨论】:

    标签: php javascript facebook facebook-javascript-sdk


    【解决方案1】:

    它在您发布的链接的文本中:

    “当您在 Facebook.com 上运行游戏时,您可以访问已签名的请求 参数”

    因此,signed_request 仅在 Canvas 应用程序中通过其 Facebook 上的 Canvas URL 可用:https://apps.facebook.com/appnamespace

    ...或者在页面应用程序中,当然。您正确地输入了自己的服务器 URL,但您还需要设置应用程序命名空间,并且您自己的服务器 URL 将加载到位于 apps.facebook.com/appnamespace 的 iframe 中。

    话虽如此,您可以使用 PHP SDK 从中获取数据 ($facebook->getSignedRequest()),或链接中显示的函数 (parse_signed_request)。

    编辑: 您不能直接在 JavaScript 中访问 signed_request,但您可以使用服务器语言对其进行回显。例如(未测试,但你会明白的):

    <script>
    var signed_request = '<?php echo json_encode($signed_request); ?>';
    </script>
    

    【讨论】:

    • 感谢您的回复,但这不是我想要的回复。我知道我需要一个应用程序和应用程序命名空间(我有,因为我已经从 facebook 登录用户)。我只想举一个例子,说明如何使用 javascript sdk 获取 signed_request。收到此请求后,我将使用 ajax 将其从 javascript 页面发送到我的服务器以进行解析,但我的问题是我无法在 javascript 中访问该 signed_request。
    • 所以你可以在服务器端访问它?一种解决方案是回显它。我将编辑我的答案。
    • 我刚刚发现我可以从 javascript 访问它。 (至少是编码部分)。我正在搜索我的 cookie,发现当用户登录时 Facebook 存储了一个名为“fbsr_yourappid”的 cookie,然后您可以将其发送到服务器并对其进行解码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多