signed_request为$ _GET而不是$ _POST

时间:2011-09-21 18:19:42

标签: php facebook api request authorization

我正在处理的应用程序已经重写了规则,以确保用户始终使用https。在我的fb应用程序设置中,我可以定义安全和非安全画布页面以使用https(因此不会发生重定向)但我不能在应用程序的选项卡页面上执行相同操作。据我所知,FB使用用户运行的任何协议。

因此,当用户通过http命中应用程序时,mod_rewrite会将用户重定向到https版本。重定向不传递表单数据。有一个我发现使用代理重定向讨论的线程,但似乎没有用。

我是否可以使用一些配置设置将signed_request $ _POST转换为$ _GET?另外,我可以通过api调用来获取signed_request吗? facebook-> getSignedRequest()只查看$ _REQUEST,由于重定向不包含任何帖子数据。

3 个答案:

答案 0 :(得分:0)

我在PHP中进行重定向(使用$_SERVER['HTTPS']),而不是通过.htaccess,并在首先将签名的请求数据保存到用户的会话后执行此操作。

答案 1 :(得分:0)

我在这里遇到同样的问题。当我使用HTTPS访问选项卡时,我得到了signed_request,因为没有重定向发生。

我在同一台服务器上运行另一个Facebook应用程序,它使用htaccess文件确保文件通过HTTPS提供。所以,我最终做的是确保我正在处理的子文件夹被排除在重写之外。像这样:

RewriteCond %{THE_REQUEST} !/my-app-folder

然后,在我的PHP中,我检查引用是否是HTTP。如果不是,我将标题更改为我的应用程序的HTTPS版本。像这样:

$referer = $_SERVER['HTTP_REFERER'];
if (substr($referer,0,5) != 'https') {
    header("Location: https://www.facebook.com/myapp?sk=app_xxxxxxxxxxxxxx");
}

这可能不是万无一失的,但是一旦我点击那个按钮,我肯定会得到我需要的结果。我在可怕的IE中也测试了它,它似乎也在那里工作。

答案 2 :(得分:0)

如果您在https上访问此特定网站,某些浏览器会自动将您的请求重定向到https,因此如果您在Facebook上处于http模式,则有以下情况:

facebook要求你的应用程序的http版本,浏览器将这个facebook的请求重定向到https和POST数据,因此signer_request在这个过程中消失...

我在chrome 23中看到了这个问题,如果你删除了浏览数据(特别是“取消授权内容许可证”)app应该在http上运行