![](/img/trans.png)
[英]how to check if user has already signed up or not in firebase via google account in swift
[英]Swift How to stop views from being called based on which Firebase user account is signed in
在我的應用程序中,我有三種不同類型的帳戶(客戶、員工、企業),並且正在執行 Firebase 調用檢查以查看當前登錄的用戶並顯示與當前用戶匹配的視圖。 問題是正在為與當前用戶 UID 不匹配的員工/業務視圖執行的代碼,從而導致崩潰。 當用戶 UID 與這些配置文件不匹配時,如何阻止此代碼執行? 我已經為視圖放置了 PRINT 語句,因此在控制台的圖片中您可以看到“員工視圖”在“客戶視圖”之前被調用,因為客戶已登錄 UID 與“員工視圖”中的 Firebase 調用不匹配因此崩潰。
class Add: UIViewController {
@IBOutlet weak var customerAdd: UIView!
@IBOutlet weak var employeeAdd: UIView!
@IBOutlet weak var businessAdd: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let uid = Auth.auth().currentUser?.uid
print(uid)
self.customerAdd.isHidden = true
self.employeeAdd.isHidden = true
self.businessAdd.isHidden = true
print(datapass)
print("Printing datapass here")
checkIfCustomerIsSignedIn()
}
func checkIfCustomerIsSignedIn() {
print("Called 1")
Auth.auth().addStateDidChangeListener({ (auth, user) in
print("Called 2")
if (user != nil) {
print("Called 3")
Database.database().reference().child("user_profiles").child((user?.uid)!).observeSingleEvent(of: .value, with: { snapshot in
if snapshot.exists() {
print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
self.customerViewData = true
self.employeeViewData = false
self.businessViewData = false
self.customerAdd.isHidden = false
self.employeeAdd.isHidden = true
self.businessAdd.isHidden = true
} else {
print("customer is not signed in")
//self.checkIfEmployeeIsSignedIn()
}
})
}
})
}
func checkIfEmployeeIsSignedIn() {
Auth.auth().addStateDidChangeListener({ (auth, user) in
if (user != nil) {
Database.database().reference().child("employees").child((user?.uid)!).observeSingleEvent(of: .value, with: { snapshot in
if snapshot.exists() {
print("employee is Signed In")
print("employee ADD")
self.customerViewData = false
self.employeeViewData = true
self.businessViewData = false
self.customerAdd.isHidden = true
self.employeeAdd.isHidden = true
self.businessAdd.isHidden = true
} else {
print("employee is not singed in")
self.checkIfBusinessIsSignedIn()
}
})
}
})
}
func checkIfBusinessIsSignedIn() {
Auth.auth().addStateDidChangeListener({ (auth, user) in
if (user != nil) {
Database.database().reference().child("Businesses").child((user?.uid)!).observeSingleEvent(of: .value, with: { snapshot in
if snapshot.exists() {
print("Business is Signed In")
print("Business ADD")
self.customerViewData = false
self.employeeViewData = false
self.businessViewData = true
self.customerAdd.isHidden = true
self.employeeAdd.isHidden = true
self.businessAdd.isHidden = false
} else {
print("No account is logged in so show anonymous")
self.customerViewData = true
self.employeeViewData = false
self.businessViewData = false
self.customerAdd.isHidden = false
self.employeeAdd.isHidden = true
self.businessAdd.isHidden = true
}
})
}
})
}
我建議您嘗試發布更多代碼。 例如, customerViewData
、 employeeViewData
和busineesViewData
在哪里。 數據通行證從何而來? 沒有足夠的信息。
無論如何,我真的建議您根據用戶類型更改顯示數據的方式。 我認為最合乎邏輯的方法是使用三個不同的視圖,每個視圖都有它的 VC 和一個父視圖 controller,它檢查用戶權限並決定顯示哪個視圖。 與僅使用一個時在同一屏幕上顯示 3 (3.) 個視圖相比,這也更有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.