我的服务器仅在根级别使用带有 htaccess 重定向的 https,当用户使用 http 连接从 FB 页面调用我的选项卡应用程序时,我丢失了已签名的请求。大家知道解决方法吗?调用标签时如何强制 Facebook 使用 https?谢谢卢克
问问题
339 次
2 回答
0
调用标签时如何强制 Facebook 使用 https?
理论上,应该为此使用 HTTP 状态代码 307(临时重定向)和 308(永久重定向),因为它们要求方法保持不变,因此客户端必须使用 POST 获取重定向到的资源再次相同的数据。
但是,我没有经验与现有的浏览器配合得有多好。
使用 JavaScript 可能更好地“重定向”客户端。当然,这需要一个仅使用 HTTP 可用的资源,并且不会在服务器端重定向到它的 HTTPS 对应物。
未来,这个“问题”会自行消失,我认为——自从 Facebook 去年底宣布他们将把所有用户转移到 HTTPS 以来;所以我认为从现在开始,我们将不再需要为画布/页面选项卡应用程序提供 HTTP URL,而只使用一个 HTTPS 版本。
于 2013-01-03T12:45:41.390 回答
0
我是这样解决的:
在 FBapp 管理器中,我将在接受 http 的不同服务器上创建的页面用作 http url。在此页面中,我使用了以下代码。
$signed_request = $facebook->getSignedRequest();
$page_id = $signed_request["page"]["id"];
$fql_query_url = "https://graph.facebook.com"
."/$page_id?fields=link"
."";
try {
$fql_query_result = @file_get_contents($fql_query_url);
$fql_query_obj = json_decode($fql_query_result, true);
} catch(Exception $o){ }
$pageinfo = $fql_query_obj[link];
$pageinfo = str_replace("http://","https://",$pageinfo);
$tabpage = "$pageinfo"."?sk=app_$appId";
echo "
<!-- force tab iframe -->
<script type=\"text/javascript\">
top.location.replace('$tabpage');
</script>
";
?>
就这样
于 2013-01-03T16:39:17.303 回答