Проверьте, вошли ли вы в Facebook с помощью PHP SDK 4.0.

Я хочу проверить, вошел ли я уже в Facebook при переходе на index.php, чтобы я автоматически перенаправлял на домашнюю страницу.

Однако мой код будет проверяться только после нажатия на ссылку входа в систему.

Facebook\FacebookSession::setDefaultApplication(Globals::FB_APP_ID, Globals::FB_APP_SECRET);

$helper = new Facebook\FacebookRedirectLoginHelper("myurl");

try {
        $session = $helper->getSessionFromRedirect();

} catch (FacebookRequestException $ex) {
    // When Facebook returns an error
} catch (Exception $ex) {
    // When validation fails or other local issues
}

// see if we have a session
if (isset($session)) {
    // graph api request for user data
    $request = new FacebookRequest($session, 'GET', '/me');
    $response = $request->execute();
    // get response
    $graphObject = $response->getGraphObject();

    header("location:home.php");
} else {
    // show login url
    echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}

Я проверил другую ветку о Facebook PHP SDK, но о SDK 4.0 мало что известно. И ничего, что работало для меня ..

Я думал, что могу добавить токен в сеанс, однако это не сработает, если я уже войду в Facebook до своего первого посещения... Это также вызовет проблемы, если я выйду из Facebook без выхода с моего сайта.


person Jean-François Savard    schedule 29.05.2014    source источник


Ответы (1)


Поскольку я обнаружил, что этот вопрос часто задают без ответа, я решил поделиться тем, что я сделал с сообществом.

Переменная $session в моем коде содержит токен доступа, который можно использовать для повторного создания экземпляра сеанса в любом другом месте, просто выполняя new FacebookSession('token').

Учитывая, что при первом входе в систему я извлекаю токен из $session и сохраняю его в $_SESSION. Затем я создал простую служебную функцию, которая сначала проверяет, установлена ​​ли переменная _5, а затем пытается создать новую сессию Facebook, используя сохраненный токен. Если стокен недействителен, сеанс не будет создан, тогда я могу обнаружить его в своей функции util и вернуть, действительно ли пользователь вошел в систему или нет.

Обратите внимание, что токен доступа становится недействительным при выходе пользователя из Facebook.

URL-адрес для входа + хранилище токенов:

FacebookSession::setDefaultApplication(Globals::FB_APP_ID, Globals::FB_APP_SECRET);


$helper = new Facebook\FacebookRedirectLoginHelper("http://localhost/PoubellesDeMerde/PoubellesDeMerde/index.php");

try {
        $session = $helper->getSessionFromRedirect();

} catch (FacebookRequestException $ex) {
    // When Facebook returns an error
} catch (Exception $ex) {
    // When validation fails or other local issues 
}

// see if we have a session
if (isset($session)) {
    // graph api request for user data
    $request = new FacebookRequest($session, 'GET', '/me');
    $response = $request->execute();

    $_SESSION['token'] = $session->getToken();
} else {
    // show login url
    echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}

Полезная функция:

public static function isLoggedIn()
{
    $id=0;       
    if(isset($_SESSION['token']))
    {
        $session = new FacebookSession($_SESSION['token']);

        $request = new FacebookRequest($session, 'GET', '/me');
        $response = $request->execute();

        $graphObject = $response->getGraphObject();

        $id = $graphObject->getProperty("id");                        
    } 

    return $id!=0;
}
person Jean-François Savard    schedule 31.05.2014
comment
Я получаю эту ошибку при использовании функции Util. Неустранимая ошибка: класс «FacebookSession» не найден в /var/www/html/projects/frameworks/ci/birthdaybucks/application/models/Facebook_model.php в строке 36. - person codersrb; 31.05.2016
comment
Мне нравятся эти контроллеры - person Leandro Bardelli; 07.02.2018