Как обрабатывать авторизацию на Facebook, когда пользователь нажимает кнопку «не разрешать» - PullRequest
2 голосов
/ 17 июня 2011

Я работаю над созданием приложения для вкладок facebook, которое работает на основе iFrame.У меня все отлично работает на стороне авторизации, за исключением обработки случаев, когда пользователь нажимает «Не разрешать».Но здесь я застрял.Проведя несколько часов прошлой ночью, пытаясь решить проблемы, я понятия не имею, куда идти дальше.Сначала пользователю предлагается «Нравится» странице, чтобы получить доступ к большему количеству приложения.На этом этапе, если они нажимают, как показано, следующий шаг обнаружен, но сначала выполняется проверка, чтобы увидеть, есть ли у приложения авторизация.Если нет, то JS помещается в событие onload, которое перенаправляет родительский фрейм на ссылку авторизации с return_uri, установленной на ссылку для вкладки приложения страницы.Это прекрасно работает, если пользователь нажимает кнопку Разрешить.Если они нажимают «Не разрешать», то в конечном итоге они зацикливаются, а вещи возвращаются на страницу авторизации.Я хотел бы, чтобы пользователь показывал небольшую страницу объяснения со ссылкой на страницу авторизации, если пользователь хочет пересмотреть свой выбор.

Я обнаружил, что проблема, мешающая мне справиться с этим, заключается в том, чтоПриложение находится в iframe на странице, на которую ссылается return_uri (вкладка приложения на странице).Поэтому переменные GET error и error_reason недоступны для моего кода, только родительский фрейм, который находится в Facebook и не находится под моим контролем.

Что я могу сделать, чтобы добавить эту функциональность в мое приложение?Спасибо!

1 Ответ

3 голосов
/ 17 июня 2011

У меня была точно такая же проблема с вкладкой страницы.Я использую диалог OAuth для обработки входа в систему, но, как вы говорите, вы перенаправляете на URL страницы с приложением в нем, и вы не можете получить ошибку.

То, что я сделал, - установил переменную сеанса, котораяЯ пытался авторизоваться перед перенаправлением в диалог авторизации.Таким образом, если я не получаю авторизованного пользователя, я вижу, что он уже пробовал и показывает соответствующее сообщение.Примерно так:

$facebook = new Facebook(array(
     'appId'=>'my_app_id',
     'secret'=>'my_secret')
);

$fb_user = $facebook->getUser();
if( $fb_user ) {
    $_SESSION['auth_check'] = 0;
    // rest of application is authorized
}
elseif( isset($_SESSION['auth_check']) && $_SESSION['auth_check'] ) {
    // we attempted to authorize before and something went wrong
    // show a message explaining they need to authorize
    $_SESSION['auth_check'] = 0; // set so they get the auth screen again
}
else {
    $_SESSION['auth_check'] = 1; // attempting to authorize
    header("Location: $fb_oauth_dialog");
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...