我正在努力让Facebook“在画布页面中进行身份验证”工作,as described here for PHP。我终于得到了base64_decode的工作,但我确实无法将用户重定向到第2a节中描述的URL。我尝试了response.redirect(url)以及response.setHeader('Location',url)以及我在SO上找到的其他选项,但这些都没有奏效:/
如果我直接通过浏览器访问URL,一切似乎都按预期工作。如果我重定向到同一域上的URL,它也可以。也许我错过了一些基本的东西?是否可以重定向到外部域?完成这项工作的正确方法是什么?
提前谢谢!
更新:我刚刚发现重定向到http://heise.de或http://orf.at这样的网页有效,但不适用于http://www.google.com或http://www.facebook.com。我不知道这里发生了什么:/
答案 0 :(得分:1)
我刚才发现重定向到
http://heise.de
或http://orf.at
这样的网页有效,但不适用于http://www.google.com
或http://www.facebook.com
。我不知道这里发生了什么:/
后者正在发送X-Frame-Options
HTTP响应标头,告诉客户端页面是否要显示在(i)帧中。
Google发送的值为SAMEORIGIN
,这意味着只允许来自域google.com的网页在(i)帧中显示来自google.com的其他网页,并且Facebook会发送DENY
,这意味着页面永远不允许在任何类型的框架中显示,无论在哪里。
答案 1 :(得分:0)
由于我无法解决问题,我想分享与您一起使用的解决方法。 问题似乎是,Facebook将页面包含在iframe中,因此只允许使用window.top.location重定向,这显然无法从服务器端完成。我现在使用了一种解决方法并渲染了一个除了window.top.location = url之外什么也没做的玉视图。不是很漂亮,但它确实有效。为什么有些页面有效,而有些页面无效仍然是我的问题。