0

私はGoogleのopen-idログインを実装しました-正常に動作しているlightopenidを使用したサインアップシステム、ユーザーが自分の情報へのアクセスを許可するために一度だけサインアップする必要がある機能を追加し、ログイン後の単語のためにその情報をデータベースに保存します。

情報(ID、名前、電子メール)を取得したら、データベースに保存して、ユーザーをスキップして情報へのアクセスを何度も許可することを除いて、同じプロセスで後からログインします。

つまり、ユーザーがサインアップしてそこの情報へのアクセスを許可した場合、次回以降、ユーザーはログインするたびにアクセスを許可する必要はありません。

それを実装するために、ログインしようとするときにデータベースでIDをチェックしています。IDが存在する場合は、lightopenidの情報を要求せずにログインします。IDがない場合は、後でログインに使用するためにデータベースに保存するための情報を一度要求します。

私はデータベースで彼らの身元を確認することができますが、身元が彼らではない場合、ログイン時にlightopenidの情報を要求していないため、彼らの情報を要求する方法の一部で立ち往生しています。

情報を一度保存​​するコード(SignUp)

    $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);
}

IDを確認するためのコード。(ログイン)

    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 に答える