2

我有一个我正在托管的页面选项卡应用程序。我同时支持 http 和 https。虽然我按预期收到了 signed_request 包,但在我解码后它不包含页面信息。这些数据根本就不见了。

我验证了在 facebook、我的托管站点甚至“go between”(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

这是我收到的解码签名请求:

{"算法":"HMAC-SHA256","code":!REMOVED!,"issued_at":1369384264,"user_id":"1218470256"}

5/25 更新 - 我认为画布应用程序 url 可能与页面选项卡 url 不匹配,所以我花了几个小时查看它们是否都有斜杠的场景。他们俩在哪里都有尾随?与否,是否带有查询参数。

在将页面选项卡创建为画布应用程序 url 和页面选项卡 url 时,我还尝试更改“下一个”值。

两者都没有成功。

我确实读到了 where 因为我在 signed_request 中看到了“代码”值,这意味着 Facebook 要么无法匹配我的网址,要么我正在捕获第二个请求。但是,我给出了我所经历的所有 URL 排列,我相信这些 URL 匹配。我还订阅了“auth.authResponseChange”,它应该给我第一个 authResponse,其中应该包含带有 page.id 的signed_request(但没有)。

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

谢谢。

4

3 回答 3

1

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

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

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

虽然令人困惑(并且应该更好地记录为 Facebook 的设计选择),但这可能是有道理的,因为如果不将您的密钥放在范围内(因此将其透露给潜在的黑客),就不可能完全在 Javascript 中验证签名请求.

于 2013-06-25T05:56:51.607 回答
0

使用 PHP SDK 会容易得多,但如果您只想使用 JavaScript,也许这会有所帮助:

Facebook 注册 - 使用 Javascript 读取数据/签名请求

此外,您可能想看看这个:https ://github.com/diulama/js-facebook-signed-request

于 2013-05-29T09:30:24.867 回答
0

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

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

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

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

希望这对任何需要它的人有所帮助,因为对于遇到的每个人来说,这个问题似乎至少需要 3 个小时。

于 2013-07-15T10:10:41.350 回答