Facebook oauth重定向在iframe中不起作用

时间:2012-05-25 10:50:51

标签: facebook iframe oauth

最近我注意到我在Facebook上的应用程序停止正常工作。

当有人打开未授权的应用时,我会显示带链接的简单内容, 单击链接时,在应用程序中我发出重定向(在Spring中我将“redirect:... url ..”返回到URL):

https://www.facebook.com/dialog/oauth?scope=email&client_id=317651918315301&redirect_uri=https%3A%2F%2Fapps.facebook.com%2Facnestop&scope=email&response_type=token

它将给定位置的302发送到iFrame。

然后显示空白iFrame,并返回FB的以下标题:

Cache-Control   private, no-cache, no-store, must-revalidate
Connection  keep-alive
Content-Encoding    gzip
Content-Type    text/html; charset=utf-8
Date    Fri, 25 May 2012 10:37:11 GMT
Expires Sat, 01 Jan 2000 00:00:00 GMT
P3P CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
Pragma  no-cache
Set-Cookie  _e_1vFX_0=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.facebook.com; httponly locale=pl_PL; expires=Fri, 01-Jun-2012 10:37:11 GMT; path=/; domain=.facebook.com wd=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.facebook.com; httponly
Transfer-Encoding   chunked
X-Content-Type-Options  nosniff
X-FB-Debug  VYI+cCm/Vfpx3US82n06uFuw5gF6UQDg+8GUSpGUL9A=
X-Frame-Options DENY
X-XSS-Protection    0
x-content-security-policy...    allow *;script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:*;options inline-script eval-script;report-uri https://www.facebook.com/csp.php

只显示空白的iFrame。

当我重定向到的URL直接粘贴到浏览器时 - 它显示Facebook提示授权应用程序。

当iFrame从粘贴中重定向并在浏览器中打开相同的链接时,行为有何不同?

我今天注意到这一点,以前的应用程序运行正常。

这是我的示例应用: https://apps.facebook.com/acnestop/

3 个答案:

答案 0 :(得分:2)

如果用户未授权您的应用程序,则无需处理,facebook会处理此问题。

但是处理用户尚未登录的情况可以使用getLoginURL

$loginUrl = $facebook->getLoginUrl(
    array(
        'scope'         => 'email,user_checkins,etc',
        'redirect_uri'  => 'https://apps.facebook.com/my-application/' 
    )
);
  

不要忘记redirect_uri

中的尾部斜杠

希望这有帮助

答案 1 :(得分:0)

取自Facebook:

  

由于您的游戏是在iframe中加载的,因此返回302以将用户重定向到Login>对话框将失败。相反,您必须将顶部(或_top)框架定位为重定向,>这会导致父窗口重定向到“登录对话框”URL。

因此,您必须手动将用户重定向到类似

的内容
https://www.facebook.com/dialog/oauth?client_id=YOURID&redirect_uri=YOUR-REDIRECT-URI

答案 2 :(得分:0)

这是因为Facebook 0auth不再支持iframe。 您可以在响应标头中看到x-iframe-options:deny