簡體   English   中英

如何使用 PHP 檢查用戶的 email 是否已經存在於 firebase 認證中?

[英]How can I check if the user's email is already existing in firebase authentication using PHP?

我是編程新手:>。 我想在 firebase 身份驗證中注冊一個用戶帳戶,同時將詳細信息存儲在實時數據庫中。 在給定的代碼中,我已經可以將用戶詳細信息添加到實時數據庫和 firebase 身份驗證中。 我會附上我做的代碼。

<?php
session_start();

  include('databaseconfig.php');
  //this is for add button
   if (isset($_POST['add'])) {
    //constraint for password and confirm password (I'm not using firebase authentication in this one)
    if($password = $_POST['password'] == $cpassword = $_POST['confirmPassword']){

      $fName = $_POST['givenName'];
      $lName = $_POST['lastName'];
      $bDay = $_POST['birthDate'];
      $gradeLevel = $_POST['gradeLevel'];
      $school = $_POST['school'];
      $email = $_POST['email'];
      $password = $_POST['password'];
      $question = $_POST['securityQuestion'];
      $answer = $_POST['answer'];

      $userProperties = [
        'email' => $email,
        'emailVerified' => false,
        'password' => $password,
    ];

    $createdUser = $auth->createUser($userProperties);


    if ($createdUser) {

      $postData = [
        'first_name' => $fName,
        'last_name' => $lName,
        'bithday' => $bDay,
        'grade_level' => $gradeLevel,
        'school' => $school,
        'email_address' => $email,
        'password' => $password,
        'security_question' => $question,
        'answer' => $answer
      ];

      $reference_table = "Profiles";
      $postRef = $database->getReference($reference_table)->push($postData);

      if($postRef){
          ?>
          <script>
          alert("User Added Successfully");
          </script>
          <?php
          header('Location:userlist.php');
      }
      else{
           ?>
          <script>
          alert("User not Added");
          </script>
          <?php
      }
      exit();
    } else {
          ?>
          <script>
          alert("Email already exists.");
          </script>
          <?php
    }  
  }
}

?>

但是,如果用戶嘗試注冊 email 地址,而該地址已存在於 firebase 身份驗證中,則會導致致命錯誤。 我不知道如何解決這個問題。 請幫我

致命錯誤:未捕獲的 GuzzleHttp\Exception\ClientException:客戶端錯誤: POST https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser導致400 Bad Request響應:{“錯誤”:{“代碼”:400 , "message": "EMAIL_EXISTS", "errors": [ { "message": "EMAIL_EXISTS" (截斷...) in C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\guzzle\src\Exception\RequestException. php:113 堆棧跟蹤:#0 C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\guzzle\src\Middleware.php(69): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request),對象(GuzzleHttp\Psr7\Response),NULL,數組,NULL)#1 C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\promises\src\Promise.php(204):GuzzleHttp\Middleware::GuzzleHttp{closure} (對象(GuzzleHttp\Psr7\Response))#2 C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\promises\src\Promise.php(153): GuzzleHttp\Promise\Promise::callHandler(1,對象(GuzzleHttp\Psr7\Response),NULL)#3 C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\promises\src\TaskQueue.php(48):GuzzleHttp\Promise\Promise::GuzzleHttp\Promise{closure} () #4 C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\promises\src\Promise.php(248): GuzzleHttp\Promise\TaskQueue->run(true) #5 C:\xampp\htdocs\maintenanceadmin\供應商\guzzlehttp\promises\src\Promise.php(224): GuzzleHttp\Promise\Promise->invokeWaitFn() #6 C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\promises\src\Promise.php(269) : GuzzleHttp\Promise\Promise->waitIfPending() #7 C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\promises\src\Promise.php(226): GuzzleHttp\Promise\Promise->invokeWaitList() #8 C :\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\promises\src\Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending() #9 C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\guzzle\ src\Client.php(187): 顧 zzleHttp\Promise\Promise->wait() #10 C:\xampp\htdocs\maintenanceadmin\vendor\kreait\firebase-php\src\Firebase\Auth\ApiClient.php(227): GuzzleHttp\Client->請求(' POST', 'signupNewUser', Array) #11 C:\xampp\htdocs\maintenanceadmin\vendor\kreait\firebase-php\src\Firebase\Auth\ApiClient.php(45): Kreait\Firebase\Auth\ApiClient-> requestApi('signupNewUser', Array) #12 C:\xampp\htdocs\maintenanceadmin\vendor\kreait\firebase-php\src\Firebase\Auth.php(143): Kreait\Firebase\Auth\ApiClient->createUser(對象(Kreait\Firebase\Request\CreateUser)) #13 C:\xampp\htdocs\maintenanceadmin\addUser.php(29): Kreait\Firebase\Auth->createUser(Array) #14 {main} 下一個 Kreait\Firebase\Exception \Auth\EmailExists:email 地址已被其他帳戶使用。 在 C:\xampp\htdocs\maintenanceadmin\vendor\kreait\firebase-php\src\Firebase\Exception\AuthApiExceptionConverter.php:73 堆棧跟蹤:#0 C:\xampp\htdocs\maintenanceadmin\vendorbase\kreait \src\Firebase\Exception\AuthApiExceptionConverter.php(47): Kreait\Firebase\Exception\AuthApiExceptionConverter->convertGuzzleRequestException(對象(GuzzleHttp\Exception\ClientException))#1 C:\xampp\htdocs\maintenanceadmin\供應商\kreait\firebase -php\src\Firebase\Auth\ApiClient.php(229): Kreait\Firebase\Exception\AuthApiExceptionConverter->convertException(對象(GuzzleHttp\Exception\ClientException)) #2 C:\xampp\htdocs\maintenanceadmin\vendor\kreait \firebase-php\src\Firebase\Auth\ApiClient.php(45): Kreait\Firebase\Auth\ApiClient->requestApi('signupNewUser', Array) #3 C:\xampp\htdocs\maintenanceadmin\vendor\kreait\ firebase-php\src\Firebase\Auth.php(143): Kreait\Firebase\Auth\ApiClient->createUser(對象(Kreait\Firebase\R equest\CreateUser)) #4 C:\xampp\htdocs\maintenanceadmin\addUser.php(29): Kreait\Firebase\Auth->createUser(Array) #5 {main} 拋出 C:\xampp\htdocs\maintenanceadmin\ vendor\kreait\firebase-php\src\Firebase\Exception\AuthApiExceptionConverter.php 第 73 行`

我可以從你的堆棧跟蹤中看到你正在使用kreait/firebase-php (你好,我是維護者)。

很高興您發布了這個問題,因為已經可以檢查重復的電子郵件,但沒有記錄在案。

我用這次提交彌補了它,你可以在文檔的用戶管理頁面上找到新添加的部分。

現在,根據您提供的代碼,以下更改應該有效:

<?php

// ...

try {
    $createdUser = $auth->createUser($userProperties);
} catch (\Kreait\Firebase\Exception\Auth\EmailExists $e) {
    $createdUser = null;
}

if ($createdUser) {
    // ...
} else { ?>
    <script>
        alert("Email already exists.");
    </script>
<?php
}

// ...

這將createUser()操作包裝在try/catch塊中:如果給定的 email 已經存在,則 Firebase API 響應將轉換為EmailExists異常,然后您可以處理該異常。 為了保留在您的代碼中, catch塊將$createdUser設置為null以便以下條件 ( if ($createdUser) {} ) 按您的預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM