验证应用程序后重定向到facebook选项卡的正确方法?

验证应用程序后重定向到facebook选项卡的正确方法?,facebook,facebook-php-sdk,Facebook,Facebook Php Sdk,我们正在托管一个PHP facebook画布应用程序(http://apps.facebook.com/myapp)。其中一页(http://apps.facebook.com/myapp/foobar)需要从facebook进行身份验证,以便我们可以访问有关该用户的一些信息。这是通过使用PHP-SDK的$facebook->getLoginUrl()方法生成用于身份验证的url并按预期工作来实现的 此后,我们将该应用程序作为选项卡(iFrame)添加到我们的页面(http://www.face

我们正在托管一个PHP facebook画布应用程序(
http://apps.facebook.com/myapp
)。其中一页(
http://apps.facebook.com/myapp/foobar
)需要从facebook进行身份验证,以便我们可以访问有关该用户的一些信息。这是通过使用PHP-SDK的
$facebook->getLoginUrl()
方法生成用于身份验证的url并按预期工作来实现的

此后,我们将该应用程序作为选项卡(iFrame)添加到我们的页面(
http://www.facebook.com/MyPage?sk=app_nnnnn
)。现在,当我们尝试验证用户身份时,他们会被重定向到应用程序的url(
http://apps.facebook.com/myapp/foobar
)而不是像预期的那样在选项卡的iFrame中加载
/foobar
页面


是否可以使用PHP-SDK设置身份验证,使其不会跳转到应用程序的url,而是停留在选项卡内?如果是这样,我应该遵循什么样的工作流程来实现这一点?

我只需向
http://apps.facebook.com/myapp/foobar
检查身份验证,如果是,则返回:

<script type="text/javascript">
    top.location.href = 'http://www.facebook.com/MyPage?sk=whatever';
</script>

top.location.href=http://www.facebook.com/MyPage?sk=whatever';

这将突破iframe并将您重定向到您想去的地方。

我实现这一点的方法是执行以下操作:

  • /myapp/foobar
    页面上,我检查用户是否已通过身份验证。如果他们没有设置会话值,我将使用PHP-SDK的
    $facebook->getLoginUrl()
    生成auth url,并发送一个只包含重定向
    窗口的javascript的响应。top
  • 一旦他们通过身份验证,他们就会被重定向回主页。加载此页面时,它会检查会话值,如果设置了,则会将其删除,并向
    /myapp/foobar
    发出重定向标题
这有点复杂,但似乎是一个相当稳定的解决方案