0

我的服务器仅在根级别使用带有 htaccess 重定向的 https,当用户使用 http 连接从 FB 页面调用我的选项卡应用程序时,我丢失了已签名的请求。大家知道解决方法吗?调用标签时如何强制 Facebook 使用 https?谢谢卢克

4

2 回答 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 回答