我已经实现了一个使用 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.
}
}
请查看并建议任何可能的方法。
谢谢。