Facebook应用程序 - 使用JavaScript获取signed_request

时间:2011-11-28 20:31:22

标签: facebook facebook-javascript-sdk facebook-apps

我有一个FaceBook应用程序。

有没有办法用JavaScript获取signed_request?

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

3 个答案:

答案 0 :(得分: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){ ... });
}

答案 1 :(得分:2)

来自Facebook documentation

  

已签名的请求通过HTTP POST 发送到您设置的网址   App Dashboard中的 Canvas URL

[作者强调]

您无法通过JavaScript直接访问该POST数据:

POST 数据应该由服务器接收。作为结论,浏览器不授予对该数据的访问权,接受服务器呈现客户端代码中的数据。相关问题:How to read POST request parameters using JavaScript

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

在您的情况下,包含signed_request的POST数据会通过Facebook的HTTP POST发送到您的应用,通过您在应用信息中心指定的 Canvas URL 或通过您使用Registration plugin指定的重定向网址。您可以通过FB.getLoginStatus访问它。先决条件是:您要么使用画布应用程序(您在“内部”Facebook,有页面选项卡或Canvas应用程序)或Registration Plugin。确保在您指定的URL上获取状态。相关问题:How do you post to an iframe?getSignedRequest is null when not on a tab page

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

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

同时查看此问题 - 它可能有所帮助: Facebook iframe tab signed request always empty

答案 2 :(得分:0)

使用来自facebook的javascript获取已签名的请求与$ _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

快乐的编码!!