如何使用PHP检查用户的电子邮件是否已经存在于firebase身份验证中?

gtlvzcf8  于 2023-02-03  发布在  PHP
关注(0)|答案(1)|浏览(129)

我是一个编程新手:〉.我想在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
    }  
  }
}

?>

但是,如果用户试图注册一个已经存在于firebase认证中的电子邮件地址,将会导致一个致命错误。我不知道如何修复这个错误。请帮助我
致命错误:未捕获的GuzzleHttp\异常\客户端异常:客户端错误:POST https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser导致400 Bad Request响应:{"错误":{"代码":400,"留言":"电子邮件存在","错误":[{"消息":"EMAIL_EXISTS"(已被截断...),位于C:\xampp\htdocs\维护管理\供应商\guzzlehttp\guzzle\src\异常\请求异常中。php:113堆栈跟踪:第0个C:\xampp\htdocs\维护管理\供应商\guzzlehttp\guzzle\src\中间件. php(69):请求异常::创建(对象(GuzzleHttp\Psr7\请求),对象(GuzzleHttp\Psr7\响应),空,数组,空)#1 C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\promises\src\Promise. php(204):GuzzleHttp\中间件::GuzzleHttp {闭包}(对象(GuzzleHttp\Psr7\响应))#2 C:\xampp\htdocs\维护管理\供应商\guzzlehttp\承诺\src\承诺. php(153):(1,对象(GuzzleHttp\Psr7\响应),空)#3 C:\xampp\htdocs\维护管理员\供应商\guzzlehttp\承诺\src\任务队列. php(48):GuzzleHttp\承诺\承诺::GuzzleHttp\承诺{关闭}()#4 C:\xampp\htdocs\维护管理\供应商\guzzlehttp\承诺\src\承诺. php(248):运行(真)#5 C:\xampp\htdocs\维护管理\供应商\guzzlehttp\承诺\src\承诺. php(224):调用等待Fn()#6 C:\xampp\htdocs\维护管理\供应商\guzzlehttp\承诺\src\承诺. php(269):C:\xampp\htdocs\maintenanceadmin\vendor\guzzlehttp\promise\src\promise. php(226):返回首页GuzzleHttp\承诺\承诺-〉调用等待列表()#8 C:\xampp\htdocs\维护管理\供应商\guzzlehttp\承诺\src\承诺. php(62):guzzleHttp\承诺\承诺-〉等待如果挂起()#9 C:\xampp\htdocs\维护管理\供应商\guzzlehttp\guzzzle\src\客户端. php(187):C:\xampp\htdocs\maintenanceadmin\供应商\许可证\防火墙-php\src\防火墙\授权\ApiClient. php(227):请求('POST','注册新用户',数组)#11 C:\xampp\htdocs\维护管理\供应商\许可证\防火墙-php\src\防火墙\身份验证\ApiClient. php(45):请求Api("注册新用户",数组)#12 C:\xampp\htdocs\维护管理\供应商\许可证\防火墙-php\src\防火墙\认证. php(143):创建用户(对象(创建\防火墙\请求\创建用户))#13 C:\xampp\htdocs\maintenanceadmin\addUser. php(29):创建\Firebase\身份验证-〉创建用户(数组)#14 {main}下一个创建\Firebase\异常\身份验证\电子邮件存在:该电子邮件地址已被另一个帐户使用。在C:\xampp\htdocs\maintenanceadmin\vendor\kreait\firebase-php\src\Firebase\Exception\AuthApiExceptionConverter. php中:73堆栈跟踪:#0 C:\xampp\htdocs\维护管理\供应商\许可证\防火墙-php\src\防火墙\异常\认证应用程序异常转换器. php(47):异常(对象(GuzzleHttp\异常\客户端异常))#1 C:\xampp\htdocs\维护管理\供应商\异常\防火墙-php\src\防火墙\认证\ApiClient. php(229):文件名:\xampp\htdocs\maintenanceadmin\vendor\kreit\firebase-php\src\firebase\auth\ApiClient. php(45):请求Api("注册新用户",数组)#3 C:\xampp\htdocs\维护管理\供应商\请求\防火墙\认证. php(143):创建用户(对象(创建\防火墙\请求\创建用户))#4 C:\xampp\htdocs\maintenanceadmin\addUser. php(29):在第73行的C:\xampp\htdocs\维护管理\供应商\创建\firebase-php\src\firebase\异常\AuthApiExceptionConverter.php中抛出了创建用户(数组)#5 {main}

ubof19bj

ubof19bj1#

我可以从堆栈跟踪中看到您正在使用kreait/firebase-php(您好,我是维护者👋🏻)。
我很高兴你张贴这个问题,因为它已经可以检查重复的电子邮件,但它没有记录🙈。
我用this commit弥补了这一点,您可以在文档的用户管理页面上找到新添加的部分。
现在,根据您提供的代码,下面的更改应该起作用:

<?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()操作 Package 在try/catch块中:如果给定的电子邮件已经存在,Firebase API响应将转换为EmailExists异常,然后您可以处理该异常。为了不超出您的代码范围,catch块将$createdUser设置为null,以便以下条件(if ($createdUser) {})按您的预期工作。

相关问题