Отказ в аутентификации на facebook

#php #facebook #facebook-graph-api

#php #Facebook #facebook-graph-api

Вопрос:

Я создал приложение, которое позволяет пользователю входить в систему, используя свою учетную запись Facebook. Все работает, если они нажимают «разрешить», когда их спрашивают, хотят ли они предоставить моему приложению разрешение на доступ к определенным данным из своей учетной записи Facebook. Однако, когда они нажимают «запретить», он просто продолжает цикл и продолжает спрашивать их, хотят ли они дать разрешение приложению. Как мне заставить его перейти на другую страницу, когда они нажимают «запретить», вместо того, чтобы постоянно повторять цикл и задавать один и тот же вопрос?

Я пытался просмотреть документацию, но, похоже, не могу найти то, что мне нужно.

Прежде чем запрашивать разрешение, выполняется следующее, затем, если я нажму «не разрешать», он просто продолжает перебирать приведенный ниже код, пока я не нажму «разрешить»:

 <?php

session_start();

require("facebook.php");

$facebook = new Facebook(array(
    'appId'  => 'app id goes here',
    'secret' => 'secret goes here',
    'cookie' => true
));

$session = $facebook->getSession();

if(!empty($session)) {

    try{

        $uid = $facebook->getUser();
        $user = $facebook->api('/me');

        $_SESSION['returned'] = array("id" => $uid, "name" => $user["name"], "access_token" => $session['access_token']);

        header('Location: returned.php');
        exit;

    } catch (Exception $e) {

        echo "something is wrong";
        exit;

    }

} else {

    $login_url = $facebook->getLoginUrl();
    header("Location: ".$login_url);

}
 

Комментарии:

1. Проверьте решение @uncreative, оно должно помочь. если это не сработает, пожалуйста, разместите здесь часть вашего кода, в частности скрипт, который обрабатывает аутентификацию facebook, чтобы мы могли помочь вам в отладке 🙂

2. @DroidUser, пожалуйста, ознакомьтесь с обновленным вопросом, он включает в себя код.

Ответ №1:

согласно API, он перенаправит пользователя на указанную вами страницу: http://YOUR_URL?error_reason=user_deniedamp;error=access_deniedamp;error_description=The user denied your request.

На странице, которую вы перенаправляете, чтобы проверить наличие параметра url «ошибка», кроме того, при успешном выполнении должен быть параметр url «code», который вы должны проверить, прежде чем продолжить

 if (isset($_GET['error'])) {
  header('Location: URL_TO_GO_IF_FAILED');
} else {
  // ... whatever you were doing before
}
 

Комментарии:

1. Я попытался добавить ваше предложение в свой существующий код выше непосредственно перед «else», но изменил ваше if на an elseif , и, похоже, оно никогда не доходит до него, когда я нажимаю «не разрешать».

2. Чтобы это заработало, мне пришлось добавить URL-адрес в facebook.php досье.