如何使用google directory API在创建用户前检查用户是否存在


How to check whether a user exist before creating using google directory API

使用下面的代码,我能够成功创建新用户。但如果用户已经存在,则无法工作。那么,当user不存在于我的域时,我该如何运行这段代码呢?

我的代码是
$dir = new Google_Service_Directory($client);
$user = new Google_Service_Directory_User();
$name = new Google_Service_Directory_UserName();
$firstname=$_POST['first_name'];
$familyname=$_POST['last_name'];
$primary_email= $firstname.'.'.$familyname.'@mydomainname.com';
$name->setGivenName($firstname);
$name->setFamilyName($familyname);
$user->setName($name);
$user->setHashFunction("SHA-1");
$user->setPrimaryEmail($primary_email);
$user->setPassword(hash("sha1","password"));
$result = $dir->users->insert($user);
echo "New user ".$result->primaryEmail." created successfully.";

Google没有直接提供解决方案,但是你可以做两件事:

  1. 尝试在所有google用户
  2. 中查找您的用户
  3. 尝试插入并捕获异常。

查找所有用户:

function userExists(Google_Service_Directory $dir, (string)$primary_email) : bool {
    $remoteUsers = $dir->users->listUsers(['domain' => 'mydomain']);
    foreach($remoteUsers as $remoteUser) {
        if((string)$remoteUser->primaryEmail == $primary_email) {
            return true;
        }
    }
    return false;
}

捕捉:

try {
    $result = $dir->users->insert($user);
} catch (Google_Service_Exception $e) {
    $errors = $e->getErrors();
    foreach($errors as $error) {
        if($error['message'] == "Entity already exists.") {
            echo "Entity already exists.";
        }
    }
}