
[英]how I can check if the email is already exist in authentication 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.