0

我已经实现了一个使用 lightopenid 的 Google 开放 ID 登录注册系统,它运行良好,我想添加一个功能,要求用户只注册一次以允许访问他们的信息,然后我将该信息存储在数据库中以供登录后记.

一旦我得到他们的信息(身份、姓名、电子邮件),我将它们存储在数据库中,以便通过相同的过程将它们记录在后记中,除了跳过用户一次又一次地授予对他们信息的访问权限。

即当用户注册并授予访问该信息的权限时,下次用户不必每次登录都授予访问权限。

为了实现它,我在尝试登录时检查他们在数据库中的身份,如果存在身份,则登录他们而不在 lightopenid 中询问信息,如果身份不是他们,请他们一次将他们的信息存储在数据库中以供以后登录使用。

我可以在数据库中检查他们的身份,但如果身份不是他们的身份,则卡在该部分,然后如何询问他们的信息,因为我没有在登录时请求 lightopenid 中的信息。

存储信息一次的代码。(注册)

    $openid = new LightOpenID('localhost');
    if(!$openid->mode) {
    if(isset($_GET['login'])) {
        $openid->identity = 'https://www.google.com/accounts/o8/id';
        $openid->required = array('namePerson/first', 'namePerson/last', 'contact/email');
        header('Location: ' . $openid->authUrl());
    }
} 
if($openid->validate()) {
    require_once('../connect.php');
    $identity = $openid -> identity;
    $info = $openid->getAttributes();
    $username = $info['namePerson/first'].'.'.$info['namePerson/last'];
    $open_id = explode('=', $identity);
    $identity_hash = $open_id[1];
    $email = $info['contact/email'];

    $query = "INSERT INTO user_login (username, identity_hash, email) VALUES ('$username', '$identity_hash', '$email')"; 
    $create_user = mysqli_query($connection, $query) or trigger_error(mysqli_error($connection), E_USER_ERROR);
}

检查身份的代码。(登录)

    if(!$openid->mode) {
    if(isset($_GET['login'])) {
        $openid->identity = 'https://www.google.com/accounts/o8/id';
        header('Location: ' . $openid->authUrl());
    }
} 
if($openid->validate()) {
    require_once('../connect.php');
    $identity = $openid -> identity;
    $open_id = explode('=', $identity);
    $identity_hash = $open_id[1];
    $query = "SELECT * FROM user_login WHERE identity_hash='$identity_hash'";
    $result = mysqli_query($ulconnection, $query) or trigger_error(mysqli_connect_error(), E_USER_ERROR);

    if($result){
    $row = mysqli_fetch_assoc($result);
    $username = $row['username'];
    $email = $row['email'];
    echo $username.'<br />';
    echo $email.'<br />';
    }
    else{
    // how to ask for info here.
    }
}

请查看并建议任何可能的方法。

谢谢。

4

1 回答 1

0

我让它以这种方式工作。

    if($result){
    $row = mysqli_fetch_assoc($result);
    $username = $row['username'];
    $email = $row['email'];
    echo $username.'<br />';
    echo $email.'<br />';
    }
    else{
    header("Location: signup.php?login");   
    }

希望这对其他人也有帮助。

于 2012-11-09T07:32:27.633 回答