6

我有一个 Facebook 应用程序。

有什么方法可以使用 JavaScript 获取 signed_request 吗?

使用 PHP,它看起来像这样:$_REQUEST['signed_request'],但我不能使用 php。

4

3 回答 3

2

Facebook 文档

签名的请求通过 HTTP POST发送到在 App Dashboard 中设置为 Canvas URL的 URL。

【作者强调】

您不能通过 JavaScript 直接访问该 POST 数据:

POST数据应该由服务器接收。作为结论,浏览器不授予对该数据的访问权限,接受服务器在客户端代码中呈现数据。相关问题:如何使用 JavaScript 读取 POST 请求参数

为什么会这样?我猜原因是安全性:想象一下在 POST 请求中向您的服务器发送密码,并且您在应用程序中使用的一些恶意 JavaScript 插件试图读取该数据并将其发送到自己的恶意服务器。那一点都不好。

在您的情况下,包括 在内的 POST 数据signed_request由 Facebook 通过 HTTP POST 发送到您的应用程序,通过您在应用程序仪表板中指定的Canvas URL或通过您使用注册插件指定的重定向 URL请求您的应用程序页面。您可以通过 访问它。先决条件是:您正在使用画布应用程序(您在 Facebook“内部”,拥有页面选项卡或画布应用程序)或注册插件。确保获取您指定的 URL 的状态。相关问题:如何发布到 iframe?并且getSignedRequest 不在标签页上时为空FB.getLoginStatus

还尝试FB.getLoginStatus使用设置为强制往返 Facebook 的第二个参数进行调用true- 有效地刷新响应对象的缓存并解决自上次完整会话查找以来用户登录(或退出)Facebook 或删除您的应用程序的问题在他们的帐户设置中:

FB.getLoginStatus(function(response) {
  // this will be called when the roundtrip to Facebook has completed
}, true);

另请查看这个问题 - 它可能会有所帮助: Facebook iframe tab signed request always empty

于 2013-12-16T20:55:38.057 回答
2

从 FB JavaScript SDK,您可以使用 FB.getLoginStatus 来检索 signed_request。

也就是说,如果用户登录到您的应用程序/网站。

如果没有,您可以调用 FB.login 方法。

参考:http: //developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

根据您的评论:

你好,

我认为您应该尝试将响应记录到您的控制台。

如果用户已登录,则 response.status 应等于“已连接”。它将始终返回 true,因为此响应参数中将返回一个值。

日志看起来像这样

{
    status: 'connected',
    authResponse: {
        accessToken: '...',
        expiresIn:'...',
        signedRequest:'...',
        userID:'...'
    }
}

要测试正在返回的内容,请尝试以下操作:

if(response.status == 'connected'){
   // user is logged and signed_request is accessible
   // with response.authResponse.signedRequest
}else{
   // user not logged in, request them to login
      FB.login(function(response){ ... });
}
于 2011-11-28T20:40:50.390 回答
0

使用 javascript 从 facebook 获取签名请求与 $_REQUEST['signed_request'] 上的值不同

您可以做的是将 $_REQUEST['signed_request'] 存储到 javascript 变量并通过 ajax 将其传递给 php。

例如

var signedRequest = <?php echo $_REQUEST['signed_request']  ?>

//然后触发一个jsonp请求..

如果你愿意,你可以使用我的服务。

使用方法:只需向它发出 jsonp 请求

https://websta.me/fbappservice/parseSignedRequest/<append signed request here>

如果成功,它将返回类似这样的内容

{
"algorithm": "HMAC-SHA256",
"issued_at": xxxxx,
"page": {
    "id": "xxxxxxx",
    "admin": true,
    "liked": false
},
"user": {
    "country": "jp",
    "locale": "en_US",
    "age": {
        "min": xx
    }
}

如果失败,它将输出:

Bad signed Json Signature

编码快乐!!

于 2014-08-08T07:21:32.653 回答