我是一个编程新手:〉.我想在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}
1条答案
按热度按时间ubof19bj1#
我可以从堆栈跟踪中看到您正在使用kreait/firebase-php(您好,我是维护者👋🏻)。
我很高兴你张贴这个问题,因为它已经可以检查重复的电子邮件,但它没有记录🙈。
我用this commit弥补了这一点,您可以在文档的用户管理页面上找到新添加的部分。
现在,根据您提供的代码,下面的更改应该起作用:
这将
createUser()
操作 Package 在try/catch
块中:如果给定的电子邮件已经存在,Firebase API响应将转换为EmailExists
异常,然后您可以处理该异常。为了不超出您的代码范围,catch
块将$createdUser
设置为null
,以便以下条件(if ($createdUser) {}
)按您的预期工作。