用户拒绝请求后尝试请求权限时出现错误消息(使用Facebook PHP SDK)

时间:2011-10-21 14:14:23

标签: facebook permissions denied

我正在使用PHP Facebook SDK(v.3.1.1)来构建我的Facebook应用程序。 在我的流程中的某个时刻,我需要用户接受我的应用程序。我正在使用以下代码:

// Is there an error? Redirect to explain permissions page
if(!empty($_GET['error'])) {
    $redirectUrl = APP_FACEBOOK_PAGE;
require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php');
die();  
}

// Prepare app
$facebook = new Facebook(array(
    'appId'  => APP_ID,
    'secret' => APP_SECRET,
    'cookie'=> true
));
$facebookId = $facebook->getUser();

// Changed user?
if((!empty($_SESSION['facebookAuth']['facebookId']) && $_SESSION['facebookAuth']    ['facebookId'] != $facebookId)) {
    $facebook->setAccessToken('');
    $_SESSION['facebookAuth']['facebookId'] = $facebookId;
    $redirectUrl = getRequestPermissionsUrl($facebook);
    require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php');
    die();
}

// No access token? Re-acquire it!
if($facebook->getAccessToken() == '') {
    $redirectUrl = getRequestPermissionsUrl($facebook);
    require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php');
    die();
}

// Let's see if we have an active session
if(!empty($_SESSION['facebookAuth']['facebookId']) && !empty($_SESSION['facebookAuth']    ['facebookUserObject'])){
    $facebookId = $_SESSION['facebookAuth']['facebookId'];
    $facebookUserObject = $_SESSION['facebookAuth']['facebookUserObject'];
}else{
    $facebookId = $facebook->getUser();

    if ($facebookId) {
        try {
            $facebookUserObject = $facebook->api('/me');
            // Put them in session so we can re-use them
            $_SESSION['facebookAuth']['facebookId'] = $facebookId;
            $_SESSION['facebookAuth']['facebookUserObject'] =     $facebookUserObject;
        } catch (FacebookApiException $e) {
            error_log($e);
        }
    }
}

// If no facebookId -> check permissions anyway
if(empty($facebookId)) {
    $redirectUrl = getRequestPermissionsUrl($facebook);
    require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php');
    die();
}

我的函数'getRequestPermissionsUrl'调用getLoginUrl:

return $redirectUrl = $facebookObject->getLoginUrl(array('canvas'=>1,'fbconnect'=>0,'redirect_uri'=>$returnUrl,'scope'=>'publish_stream,email,user_likes'));

文件'do_redirect.inc.php'执行js-redirect:

top.location.href = '$redirectUrl';

所以,考虑到这一点,让我们来看看第一部分。 在用户拒绝权限并重新加载页面后,将再次包含此代码。在这种情况下,$ _GET ['error']被填充,我们将被重定向到应用程序中的另一个php文件 - 一个不包含我发布的代码但与权限或内容无关的文件。在那个其他文件是一个指向再次需要权限的页面的链接 - 上面的代码再次加载但是在尝试请求权限时我收到错误'出了问题,我们正试图在Facebook页面上修复它'

我已经尝试过从破坏会话到将resstoken为空设置为......你的名字。我现在完全没有想法,所以如果你们中的某些人有任何建议,我会很高兴。任何帮助将不胜感激。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我刚看到一个问题相同的新问题 - Sorry, something went wrong after cancel application connexion on SDK 3.0

Facebook的错误跟踪器中有currently open bug关于此