Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Hybridauth 3登录/注销?_Php_Session Cookies_Hybridauth - Fatal编程技术网

Php 如何使用Hybridauth 3登录/注销?

Php 如何使用Hybridauth 3登录/注销?,php,session-cookies,hybridauth,Php,Session Cookies,Hybridauth,我可以使用Hybridauth3库登录/验证用户。 这是我的密码: session_name("authSession"); session_start(); include 'hybridauth/src/autoload.php'; $config = [ 'callback' => "https://***/loginRead.php", 'providers' => [ 'Twitter' => [],"includeEmail" =&g

我可以使用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>';
会话名称(“authSession”); 会话_start(); 包括“hybridauth/src/autoload.php”; $config=[ “回调”=>“https://***/loginRead.php”, “提供者”=>[ “Twitter”=>[],“includeEmail”=>true], “谷歌”=>[], “Facebook”=>[] ], ]; $authName=“Facebook”; 如果(isset($_请求['provider'])){ $provider=strtolower($_请求['provider']); 交换机($provider){ “谷歌”案例: $authName=“谷歌”; 打破 “facebook”案例: $authName=“Facebook”; 打破 “推特”案例: $authName=“Twitter”; 打破 } $\会话['provider']=$authName; $hybridauth=newhybridauth\hybridauth($config); $adapter=$hybridauth->getAdapter($authName); $user=$adapter->authenticate(); $userProfile=$adapter->getUserProfile(); } //此部分用于此回调https://***/loginRead.php from config if(isset($_会话['HYBRIDAUTH::STORAGE'])和&count($_会话['HYBRIDAUTH::STORAGE'])>=1){ $provider=$\会话['provider']; $hybridauth=newhybridauth\hybridauth($config); $adapter=$hybridauth->getAdapter($provider); $user=$adapter->authenticate(); $userProfile=$adapter->getUserProfile(); } 如果(isset($\u GET['loginExit'])){ $adapter->disconnect(); $hybridauth->disconnectAllAdapters(); 会话_destroy(); 标题(“位置:test.php”); 退出(); } 回显“photoURL”。“>
”; echo$userProfile->标识符。“
”; 回声'; 但我很确定我没有正确使用它。 由于我正在会话中保存提供程序以进行第二次重定向,但是必须有方法使用Hybridauth api获取提供程序名称,或者可能没有必要这样做?如何在不知道私有名称的情况下使用[Hybridauth::STORAGE]对用户进行身份验证? 对于3版或其他版本,是否有任何好的100%工作示例?谢谢,虽然您可能想改为,但还是有一些示例。如果您喜欢这些示例而不仅仅是代码示例,它们也有一些更漂亮的示例

如果您希望通过混合“API”使用会话存储,那么您希望通过访问,而不是试图直接操纵会话。广义上说,拥有一个库有自己的访问方法,而您试图跳过它直接与会话对话,这将导致一些相当棘手、难以调试的问题

如果使用Hybridauth会话访问器存储提供程序类型,则可以从其会话存储而不是自己的会话存储中加载正确的提供程序类型

最后一点要注意的是,截至撰写此答案时,Hybridauth v3正在积极开发中,但标记为beta版,可能不适合生产使用。这是当前的稳定版本

侧边栏


OP中
$config
的定义中有一个baisc PHP语法错误,因此代码永远不会工作。您可能也应该通过加载库-这将使任何PHP应用程序的使用更加方便。“我使用哪个提供程序?”“当有更简单的方法编写相同的代码时,代码似乎有点做作/迂回,但它应该可以做到这一点。”;你的url链接中需要有
$authName
,对吗?@AnarBayramov我需要一个很好的示例/说明如何使用Hybridauth 3。我可以找到任何好的例子,只是如何认证,仅此而已。我现在正在更新我的问题。给我一分钟?谢谢,但我没有看到如何从会话数据进行身份验证的示例($_session['HYBRIDAUTH::STORAGE']);有没有一种方法可以只使用$_SESSION['HYBRIDAUTH::STORAGE']对用户进行身份验证,据我所知,我应该在脚本中手动设置提供者名称FB、google等。比如从$\u会话['HYBRIDAUTH::STORAGE']获取适配器并对用户进行身份验证。我应该在数据库中存储什么样的数据来验证会话中的用户?这是一个$\u会话['HYBRIDAUTH::STORAGE']?@SERG正如我所说的,您不会直接使用$\u会话['HYBRIDAUTH::STORAGE'];您可以在
Hybridauth\Storage\Session
类上使用
get()
set()
方法,但是您可以像上面那样在会话中设置提供程序-没有什么可以阻止它。脚本中的配置数组应该包含每个适配器的所有变体,因此在会话(或DB)中,您只需要将提供程序映射到用户会话。