Facebook授权(oauth)将应用程序重定向到iFrame(在php中)

时间:2012-10-28 07:34:41

标签: php facebook login oauth

我的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));

1 个答案:

答案 0 :(得分:0)

这是你要解决这两个问题的事情的组合: 1. facebook授权将应用程序重定向到iFrame(如ifaour所述) 2. app进入循环 3. app只在IE中进入循环

对于(1),所有内容必须始终为https(或http)。我确实将我的安全画布网址设为https,但将我的画布网址保留为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?