可能重复:
Why do I get an undefined index for signed_request in my facebook app?
我在常规SO上发布了一个非常相似的问题,但后来找到了facebook SO。
如果我从facebook canvas tutorial page复制并粘贴此代码:
<?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 ......答案 0 :(得分:0)
关键位在这里:
if (empty($data["user_id"])) {
echo("<script> top.location.href='" . $auth_url . "'</script>");
这会创建一个脚本元素,指示浏览器在用户会话为空时加载auth_url。
答案 1 :(得分:0)
你确定你的浏览器没有阻止“top.location.href”javascript调用吗?尝试回显/写入$ auth_url进行进一步检查。如果您可以向我们展示它正在重新调整的“$ auth_url”,那将会/可能有所帮助:)
答案 2 :(得分:0)
'$ auth_url'仅用于重定向用户,以防他/她未授予您的应用程序权限。
'$ signed_request'是facebook发送的加密数据,变量'$ data'包含作为关联数组解密的所有数据。
你不需要关心'$ signed_request'你真正需要的'$ data'变量,它包含你可能需要的用户信息。