我已經設定了一個應用程式,用戶可以通過 Firebase 上的電話號碼身份驗證登錄,并且我正在嘗試設定邏輯,以便用戶可以通過他們的電話號碼重新登錄(如果他們已經設定了帳戶)。我正在努力將輸入的電話號碼與來自 Firestore 的檔案進行匹配(我有一個名為 phoneNumbers 的檔案夾,我專門為此目的捕獲電話設定)。
僅供參考 - 電話身份驗證邏輯一直在作業,只需要幫助將輸入的電話號碼與我資料庫中已有的電話號碼進行匹配。謝謝!
{
print ("there is a number")
let countryCodeText: String = " 1-"
let phoneNumSetup = phonenumberTextField.text ?? ""
let phoneNumber = countryCodeText phoneNumSetup
print("phone number given = \(phoneNumber)")
UserDefaults.standard.set(phoneNumber, forKey: "phoneNumber")
let db = Firestore.firestore()
db.collection(Constants.ProfileData.phoneNumbers).whereField(Constants.ProfileData.phone, isEqualTo: phoneNumber).getDocuments { (snapshot, error) in
guard error == nil, !(snapshot?.isEmpty ?? false) else { return }
let document = snapshot?.documents.first
if let userData = document?.data() {
let pN = userData[Constants.ProfileData.phone] as? String
let pNcount = pN?.count
if pNcount! > 0 {
print("phone number existed before")
PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate: nil) { (verificationID, error) in
if let error = error {
let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler: { _ in
alert.dismiss(animated: false)
}))
self.present(alert, animated: true, completion: nil)
print(error.localizedDescription)
return
}
self.performSegue(withIdentifier: "verificationSegue", sender: nil)
self.currentVerificationId = verificationID!
UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
}
}
else {
print("phone number is new")
print ("not in firebase, they need to signup!")
self.displayAlertToWelcome2()
}
}
}


uj5u.com熱心網友回復:
剛剛想通了,我正在嘗試在未登錄的情況下查詢 Firestore 資料庫!我的資料庫設定為僅允許在授權用戶時進行查詢。我將不得不重新考慮我的設定,允許對資料庫進行未認證的 ping 是不明智的。
uj5u.com熱心網友回復:
func yourFunc() {
guard let phoneNumberInput = phonenumberTextField.text else {
return
}
let phoneNumber = " 1-" phoneNumberInput
UserDefaults.standard.set(phoneNumber, forKey: "myApp.phoneNumber") // good practice to prefix user defaults
Firestore.firestore().collection(Constants.ProfileData.phoneNumbers)
.whereField(Constants.ProfileData.phone, isEqualTo: phoneNumber)
.getDocuments { (snapshot, error) in
guard let doc = snapshot?.documents.first else {
if let error = error {
print(error)
}
return
}
if let pN = doc.get(Constants.ProfileData.phone) as? String,
pN.count > 0 {
print("phone number existed before")
} else {
print("phone number is new")
print ("not in firebase, they need to signup!")
self.displayAlertToWelcome2()
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/390830.html
標籤:ios 迅速 火力基地 谷歌云firestore
