Как войти / выйти из 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 Hybridauth\Hybridauth( $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 Hybridauth\Hybridauth( $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], не зная имени пользователя? Есть ли хороший 100% рабочий пример для 3 версии или т. Д.? Спасибо
1 ответ
Как указывает @Anar Bayramov, есть несколько примеров, хотя вы, вероятно, захотите взглянуть на примеры из официального репозитория. У них также есть некоторая более симпатичная онлайн-документация для Hybridauth, если вы предпочитаете это только примерам кода.
Если вы хотите использовать хранилище сеансов через Hybrid 'API', то вы хотите получить доступ через класс Storage\Session вместо того, чтобы пытаться манипулировать сеансом напрямую. Вообще говоря, если у библиотеки есть собственный метод доступа, а попытка пропустить ее, чтобы напрямую поговорить с сеансом, приведет к некоторым довольно странным, трудным для отладки проблемам.
Если вы используете аксессор Hybridauth Session для хранения типа провайдера, вы сможете загрузить правильный из их хранилища сессий вместо своего.
Последнее замечание: на момент написания этого ответа Hybridauth v3 находится в активной разработке, но помечен как бета-версия и потенциально непригоден для производственного использования. v2.9.6 является текущей стабильной версией.
Боковая панель
В определении синтаксической ошибки PHP есть ошибка $config
в OP, так что код никогда не будет работать. Возможно, вам следует загружать библиотеку также через Composer - это облегчит вашу жизнь для любого PHP-приложения. Код "какого провайдера я использую" кажется немного надуманным / обходным, когда есть более простые способы написания того же кода, но это должно сработать.