【问题标题】:Facebook auth dialog doesn't show up in page tabFacebook 身份验证对话框未显示在页面选项卡中
【发布时间】:2012-06-05 18:58:29
【问题描述】:

在页面选项卡 (iframe) 中查看应用程序时,不会显示 Facebook 身份验证对话框。 不过,在外部查看应用程序时它工作正常。

我的 Facebook 应用设置是:

Site URL: http://domain.com/test
Canvas URL: http://domain.com/test/
Secure Canvas URL: https://domain.com/test/
Page Tab URL: http://domain.com/test/
Secure Page Tab URL: https://domain.com/test/

我已使用以下链接将应用程序添加到页面标签 ny: https://www.facebook.com/dialog/pagetab?app_id=[MY_APP_ID]&next=https://domain.com/test/

我正在使用 php sdk。我在 //domain.com/test/index.php 中的代码如下所示:

<?php
require 'facebook-php-sdk/src/facebook.php';

$facebook = new Facebook(array(
   'appId'  => '[MY_APP_ID]',
   'secret' => '[MY_APP_SECRET]',
   ));

// Get User ID
$user = $facebook->getUser();

if ($user) {
   $logoutUrl = $facebook->getLogoutUrl();
} else {
   $loginUrl = $facebook->getLoginUrl();
}

if ($user) {
   try {
      // Proceed knowing you have a logged in user who's authenticated.
      $user_profile = $facebook->api('/me');
   } catch (FacebookApiException $e) {
   error_log($e);
   $user = null;
   }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Facebook test</title>
</head>

<body>
<p>
<?php if($user) : ?>
   <a href="<?php echo $logoutUrl;?>">Logout</a>
<?php else: ?>
   <a href="<?php echo $loginUrl;?>">Login</a>
<?php endif; ?>
</p>
</body>
</html>

如果有任何帮助,将不胜感激!

【问题讨论】:

    标签: facebook facebook-php-sdk facebook-apps facebook-authentication


    【解决方案1】:

    您不能在 iframe 中使用身份验证对话框(为什么?请参见此处:http://facebook.stackoverflow.com/a/10831018/1427878)。 将 target="_blank" 添加到您的链接中,它应该可以工作。 或者只是嵌入 JavaScript SDK 并使用 FB.login,如果您想要一个弹出窗口而不需要额外费用。

    【讨论】:

    • 非常感谢您的解决方案!可爱!
    • 糟糕,在 Firefox 中不起作用。身份验证对话框出现,但添加“_blank”不会在 Firefox 中以正确的方式重新加载页面。也尝试过使用 JS SDK,但在授权后使用 window.location.reload() 重新加载页面会给我“要显示此页面,Firefox 必须发送将重复任何操作的信息......”-消息并且没有正确重新加载.
    • Facebook 在加载到 iframe 时通过 POST 调用你的应用,所以消息是正常的。当用户授权您的应用时,您是否必须重新加载您的页面?如果是这样,那么也许只需将实际时间戳(JS Date 对象)添加到 location.href,这使其成为浏览器的“新”资源。
    • 我最终得到了这样的结果:&lt;?php $server = $_SERVER["SERVER_NAME"]; $uri = $_SERVER["REQUEST_URI"]; ?&gt; window.location.href = '//&lt;?php echo $server . $uri ?&gt;';不漂亮,但有效。您能给我一个带有时间戳的代码示例吗?
    【解决方案2】:

    尝试制作一个更改 iframe 父 URL 的 JS 函数

    function RedirectTo(installURL){
         window.top.location.href = installURL;
    }
    

    并在登录文本的 onClick 事件上调用该函数

    <?php else: ?>
       <a href="#" onclick='RedirectTo("<?php echo $loginUrl;?>")'>Login</a>
    <?php endif; ?>
    

    确保 $loginUrl 变量的 RedirectURI 是您应用的 URL

    然后您必须在您的 Facebook 应用程序 (https://developers.facebook.com/apps) 中更改此设置

    应用程序域: facebook.com

    使用 Facebook 登录的网站:您的 Facebook 应用 URL (即:https://www.facebook.com/{FanPageUsername}?sk=app_{appID}

    【讨论】:

    • 谢谢,这也是一个有趣的解决方案。我试试看。
    猜你喜欢
    • 2012-06-12
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多