Как войти / выйти из системы С Hybridauth 3?


Я могу войти / авторизировать пользователя с помощью Hybridauth3 lib. Вот мой код:

session_name("authSession");
session_start();
include 'hybridauth/src/autoload.php';
$config = [
    'callback' => "https://***/loginRead.php",
    'providers' => [
        'Twitter' => [],"includeEmail" => true],
        'Google'   => [], 
        'Facebook' => []   
    ],
];

$authName = "Facebook";
if(isset($_REQUEST['provider'])){

    $provider = strtolower($_REQUEST['provider']);
    switch ($provider) {
        case 'google':
            $authName = "Google";
            break;
        case 'facebook':
            $authName = "Facebook";
            break;
        case 'twitter':
            $authName = "Twitter";
            break;
    }
    $_SESSION['provider'] = $authName;

    $hybridauth = new HybridauthHybridauth( $config ); 
    $adapter = $hybridauth->getAdapter($authName);
    $user = $adapter->authenticate();
    $userProfile = $adapter->getUserProfile();

}
    // this part is for this callback https://***/loginRead.php from config
    if(isset($_SESSION['HYBRIDAUTH::STORAGE']) && count($_SESSION['HYBRIDAUTH::STORAGE'])>=1){

        $provider = $_SESSION['provider'];
        $hybridauth = new HybridauthHybridauth( $config ); 
        $adapter = $hybridauth->getAdapter($provider);
        $user = $adapter->authenticate();
        $userProfile = $adapter->getUserProfile();
    }

    if(isset($_GET['loginExit'])){
        $adapter->disconnect();
        $hybridauth->disconnectAllAdapters();
        session_destroy();
        header("Location:test.php");
        exit();
    }

    echo '<img src="'.$userProfile->photoURL.'"><br>';
    echo $userProfile->identifier.'<br>';
    echo '<a href="?loginExit">Exit</a>';
Но я совершенно уверен, что использую его неправильно. Поскольку я сохраняю провайдера в сеансе для второго перенаправления, но должен быть способ получить имя провайдера с помощью Hybridauth api, или, может быть, нет необходимости делать это? Как аутентифицировать пользователя с помощью [HYBRIDAUTH:: STORAGE], не зная имени privider? Есть ли хороший 100% рабочий пример для версии 3 или etc? Спасибо
1 2

1 ответ:

Как указывает @Anar Bayramov, есть несколько примеров, хотя вы, вероятно, захотите посмотреть на официальные примеры репозитория. У них также есть более красиваяонлайновая документация для Hybridauth , Если вы предпочитаете это только примерам кода.

Если вы хотите использовать хранилище сеансов через гибридный "API", то вы хотите получить доступ через класс Storage\Session вместо того, чтобы пытаться управлять сеансом напрямую. Вообще говоря, имея библиотека имеет свой собственный метод доступа, и вы пытаетесь пропустить его, чтобы поговорить с сессией напрямую, что приведет к некоторым довольно странным, трудным для отладки проблемам.

Если вы используете средство доступа к сеансам Hybridauth для хранения типа провайдера, то вы сможете загрузить правильный тип из их хранилища сеансов вместо вашего собственного.

Заключительное Примечание, На момент написания этого ответа Hybridauth v3 находится в активной разработке, но помечен как бета и потенциально непригоден для производства использовать. v2.9.6 - текущийстабильный релиз.

Боковая панель

Существует синтаксическая ошибка baisc PHP в определении $config в OP, так что этот код никогда не будет работать. Вероятно, вы также должны загружать библиотеку через Composer - это облегчит вашу жизнь для любого приложения PHP. Код" which provider do I use " кажется немного надуманным / окольным, когда есть более простые способы написания того же кода, но он должен делать то же самое. уловка.