如何使用 Hybridauth 3 login/logout?

How to login/logout with Hybridauth 3?

我可以 login/auth 使用 Hybridauth3 库的用户。 这是我的代码:

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] 对用户进行身份验证? 3 版本等是否有任何好的 100% 工作示例?谢谢

, there are some examples, although you probably want to look at the official repository examples instead. They also have some prettier online documentation for Hybridauth 如果您更喜欢它而不是代码示例。

如果您想通过混合 'API' 使用会话存储,那么您希望通过 the Storage\Session class 访问而不是尝试直接操作会话。从广义上讲,让一个库有自己的访问方法,而你试图跳过它直接与会话对话会导致一些非常时髦、难以调试的问题。

如果您使用 Hybridauth 会话访问器来存储提供程序类型,那么您将能够从他们的会话存储而不是您自己的会话存储中加载正确的类型。

最后请注意,在撰写此答案时,Hybridauth v3 正在积极开发中,但被标记为 beta 并且可能不适合生产使用。 v2.9.6 是当前的 稳定 版本。

边栏

OP 中 $config 的定义中存在基本 PHP 语法错误,因此该代码永远无法运行。您可能也应该通过 Composer 加载库 - 这将使您的任何 PHP 应用程序的生活更轻松。当有更简单的方法可以编写相同的代码时,"which provider do I use" 代码看起来有点 contrived/roundabout,但它应该可以解决问题。