0

可能重复:
为什么我在我的 Facebook 应用程序中获得未定义的 signed_request 索引?

我在常规 SO 上发布了一个非常相似的问题,但后来发现了 facebook SO。

如果我从facebook 画布教程页面复制并粘贴此代码:

 <?php 

     $app_id = "YOUR_APP_ID";

     $canvas_page = "YOUR_CANVAS_PAGE_URL";

     $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page);

     $signed_request = $_REQUEST["signed_request"];

     list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

     $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

     if (empty($data["user_id"])) {
            echo("<script> top.location.href='" . $auth_url . "'</script>");
     } else {
            echo ("Welcome User: " . $data["user_id"]);
     } 
 ?>

如果 $auth_url 从未被调用,我怎么能得到signed_request?或者,也许我不懂 PHP。它创建了 $auth_url 但永远不会去获取它,所以 $signed_request 永远不会被填充。我究竟做错了什么?

编辑:这是因为我很愚蠢,没有通过 apps.facebook.com 访问它,而是去http://mydomain.com ...

4

3 回答 3

0

关键位在这里:

if (empty($data["user_id"])) {
            echo("<script> top.location.href='" . $auth_url . "'</script>");

这将创建一个脚本元素,该元素指示浏览器在用户会话为空时加载 auth_url。

于 2011-09-23T20:36:24.353 回答
0

你确定你的浏览器没有阻止“top.location.href”javascript调用吗?尝试 echo/writeln $auth_url 进行进一步检查。如果您可以向我们展示它正在返回的“$auth_url”,那将/可能会有所帮助:)

于 2011-09-23T20:36:46.517 回答
0

'$auth_url' 仅用于在用户未授予您的应用程序权限的情况下重定向用户。

'$signed_request' 是 facebook 发送的加密数据,变量 '$data' 包含解密为关联数组的所有这些数据。

你不需要关心'$signed_request' 你真正需要的是'$data' 变量,它包含你可能需要的用户信息。

于 2011-09-23T20:39:56.353 回答