Сообщение об ошибке при попытке запросить разрешения после того, как пользователь отклонил запрос (используя Facebook PHP SDK) - PullRequest
0 голосов
/ 21 октября 2011

Я использую 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-перенаправление:

top.location.href = '$redirectUrl';

Итак, имея в виду, давайте посмотрим на первую часть. Этот код снова включается после того, как пользователь отказал в разрешении и страница перезагрузилась. В этом случае $ _GET ['error'] заполняется, и мы будем перенаправлены в другой php-файл в приложении - файл, который не содержит код, который я опубликовал, но не имеет никакого отношения к разрешениям или тому подобному. В этом другом файле есть ссылка на страницу, которая снова нуждается в разрешении - приведенный выше код снова загружается, но при попытке запросить разрешения у меня появляется ошибка «что-то пошло не так, и мы пытаемся это исправить» на странице Facebook .

Я пытался все время от уничтожения сессий до установки пустого маркера доступа в ... вы называете его. У меня совершенно нет идей, поэтому я был бы рад, если у кого-нибудь из вас есть какие-либо предложения. Любая помощь будет принята с благодарностью.

Заранее спасибо!

1 Ответ

0 голосов
/ 21 октября 2011

Я только что увидел новый вопрос, задающий то же самое - Извините, что-то пошло не так после отмены подключения приложения на SDK 3.0

Существует в настоящее время открытая ошибка в баг-трекере Facebook об этом

...