【问题标题】:Facebook authorization (oauth) redirecting app out of iFrame (in php)Facebook授权(oauth)将应用程序重定向到iFrame(在php中)
【发布时间】:2012-10-29 09:01:05
【问题描述】:

我的 facebook 应用程序在授权时被重定向到 iFrame 之外。我已经使用了来自 gitHub 的 facebook.php 和 base_facebook.php 没有任何更改,并且几乎遵循了 example.php。我可能会错过什么?:

$facebook = new Facebook(array(
    'appId'  => $configParam['appId'],
    'secret' => $configParam['secret']
));
$appId=$configParam['appId'];
$user = $facebook->getUser();
if ($user==null) {
    $loginUrl = $facebook->getLoginUrl(array(
            'scope' => $perm
                ));     
    $loginUrl = $facebook->getLoginUrl();
    echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
}

loginUrl 在 base_facebook.php 中构造为:

$this->establishCSRFTokenState();
$currentUrl = $this->getCurrentUrl();
return $this->getUrl(
'www',
'dialog/oauth',
array_merge(array(
        'client_id' => $this->getAppId(),
        'redirect_uri' => $currentUrl, // possibly overwritten
        'state' => $this->state),
      $params));

【问题讨论】:

  • 因此,redirect_uri 是当前 URL (www.myserver.com/myapp/index.php)。如果我将redirect_uri 硬编码为apps.facebook.com/myapp,facebook 会抛出一个错误(“redirect_uri 不是绝对URI”)。如果他们的任何基本应用程序设置有缺陷,通常人们会遇到这个问题,但我看不出有什么问题。这是我的基本设置: siteurl: myserver.com/myapp namespace: //所以我确实设置了命名空间 canvasUrl: myserver.com/myappsecure canvas url: myserver.com/myapp
  • p.s:确保将https 协议添加到您的画布网址,因此:https://apps.facebook.com/app_namespace/
  • 当我给出redirect_uri(而不是当前url)时,我得到错误:API错误代码:191 API错误描述:指定的URL不属于应用程序错误消息:redirect_uri is' t 绝对 URI。检查 RFC 3986。无论给出 myserver.com/myappapps.facebook.com/namespace 我使用的是 https,我都会收到此错误
  • 当我将画布 URL 更改为 https 时,上述问题就消失了。但是现在应用程序无限循环

标签: php facebook login oauth


【解决方案1】:

解决这两个问题需要综合考虑: 1. facebook 授权将应用程序重定向到 iFrame 之外(如 ifaour 所述) 2. 应用程序进入循环 3. 应用只在IE中进入循环

对于 (1),所有内容都必须始终为 https(或 http)。我确实将我的安全画布 URL 设为 https,但将我的画布 URL 保留为 http(我认为这很好)。显然,两者都应该是https

对于 (2),GitHub 上的 OOB facebook-php 集成代码使用当前 URL 作为 redirect_uri。您必须将其更改为 apps.facebook.com/namespace - 请注意,这必须在 base_facebook.php 中的两个位置完成 - getLoginUrl 和 getAccessTokenFromCode

对于(3)看Why my FB app loops forever in IE?

【讨论】:

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