【问题标题】:Facebook application : Doesn't redirect to OAuth in an iFrameFacebook 应用程序:不重定向到 iFrame 中的 OAuth
【发布时间】:2012-11-12 18:03:36
【问题描述】:

我目前正在使用 php sdk 和 js sdk 开发一个 facebook 应用程序。 (两个都需要)

当用户尚未授权应用程序并加载画布页面 (https://apps.facebook.com/app_name/) 时,什么都没有发生,他只是得到一个顶部有 facebook 栏的空白页面。 但是,如果他加载应用程序的直接 url (https://my_app.mydomain.com),它工作正常,他被重定向到 OAuth 对话框。如果他授权该应用程序,则他会被重定向到https://apps.facebook.com/app_name/,并且 iframe 会正确加载。

如果用户已经授权应用程序,则两个链接都可以正常工作(https://apps.facebook.com/app_name/ 和 https://my_app.mydomain.com)。

这是我的验证码:

<?php

require 'php-sdk/facebook.php';

$facebook = new Facebook(array(
  'appId'  => '327991330620101',
  'secret' => '79asecretcc4300',
  'cookie' => true
));

$user = $facebook->getUser();



if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $user = null;
  }
}

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

    $params = array(
      'scope' => 'publish_stream',
      'redirect_uri' => 'https://apps.facebook.com/quiet_quies/'
    );

  $loginUrl = $facebook->getLoginUrl($params);
  header('Location: ' . $loginUrl);
}

有人对此有想法吗?真的快把我逼疯了... 谢谢你的帮助。

【问题讨论】:

  • 不能将身份验证对话框加载到任何类型的 (i) 框架中。使用 JavaScript 打破它进行登录(带有top.location.href = {login_url} 的脚本元素),或者使用 JS SDK 代替使用客户端登录。
  • 但是如果用户没有授权应用,我的页面根本就加载不出来,所以我不能放任何js进去...
  • 当然你的应用程序无论如何都会被加载——但这取决于你在这种情况下做什么,如果事情进展顺利。如果您仍在使用脚本中显示的标题,那么只有带有 FB 徽标的页面才会加载到框架中。

标签: facebook iframe canvas oauth


【解决方案1】:

是的,@CBroe 是对的,在您的 php 代码中尝试将 header('Location: ' . $loginUrl); 行替换为

echo "<script language=javascript>top.location.href ='".$loginUrl."'</script>";

那么它应该可以工作了。

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    相关资源
    最近更新 更多