页面选项卡中的Facebook应用程序接收signed_request但缺少页面数据

时间:2013-05-24 08:40:19

标签: authorization facebook-page

我有一个我正在托管的页面标签应用。我支持http和https。虽然我按预期收到signed_request包,但在解码后它不包含页面信息。这些数据完全没有了。

我验证了在facebook,我的托管网站甚至“在...之间” - facebook的静态页面处理程序中使用了类似的方案(https)。

还创建了一个支持页面选项卡的新应用程序,但得到了相同的结果 - 在signed_request中没有页面信息。

人们可以想到的任何其他原因?

我使用以下链接将应用添加到页面标签中:

https://www.facebook.com/dialog/pagetab?app_id=176236832519816&next=https://www.intelligantt.com/Facebook/application.html

以下是我正在使用的页面标签(注意:需要权限):

https://www.facebook.com/pages/School-Auction-Test-2/154869721351873?id=154869721351873&sk=app_176236832519816

以下是我收到的已解码的signed_request:

{ “算法”: “HMAC-SHA256”, “代码”:!移除, “issued_at”:1369384264, “USER_ID”: “1218470256”}

5/25更新 - 我想也许画布应用程序网址与页面标签网址不匹配所以我花了几个小时来完成他们都有一个尾随斜杠的情况。它们都有尾随的地方?是否具有查询参数。

我还尝试在将页面标签创建到画布应用网址和页面标签网址时更改“下一个”值。

无论如何都没有成功。

我确实读过哪里因为我在signed_request中看到'code'值,这意味着Facebook无法匹配我的网址或我正在捕获第二个请求。但是,我给出了我经历的所有URL排列,我相信网址匹配。我还订阅了'auth.authResponseChange',它应该给我第一个authResponse,它应该包含带有page.id的signed_request(但不包含)。

如果我有任何声誉,我会为此添加一笔赏金。

感谢。

3 个答案:

答案 0 :(得分:1)

我刚刚在这个完全相同的问题上花了大约5个小时,并发布了一个不正确的先前答案。这是交易:

正如您所指出的,如果您的选项卡在纯javascript中实现为静态html页面(扩展名为* .htm),则signed_request似乎缺少页面数据。

我在完全相同的页面上重复完全相同的测试,但是将我的html页面(包括js)包装在Perl脚本中(带有* .cgi扩展名)...并且,voila,signed_request具有页面信息。

虽然令人困惑(并且应该更好地记录为Facebook的设计选择),但这可能有一定意义,因为如果不将您的密钥放在范围内(并因此将其暴露给范围),则无法在Javascript中完全验证signed_request潜在的黑客)。

答案 1 :(得分:0)

使用PHP SDK会更容易,但是如果你只是想使用JavaScript,也许这会有所帮助:

Facebook Registration - Reading the data/signed request with Javascript

此外,您可能需要查看此内容:https://github.com/diulama/js-facebook-signed-request

答案 2 :(得分:0)

只是你无法使用javascript signed_request获取完整的参数,使用php sdk获取完整的signed_request。并将您需要的值记录到javascript变量...

在实例化后使用php sdk ...使用facebook对象如下。

$ signed_request = $ facebook-> getSignedRequest(); var_dump($ signed_request);

这只是为了调试,但你会看到打印的数组将包含许多你出于安全原因不能用js sdk获得的值。

希望能帮助那些需要它的人更好,cz看来这个问题需要在最后3个小时才能遇到所有人。