我是Firebase的新手,如果这个问题有点“初学者”或令人困惑,我会提前道歉。
我正在玩一个学习使用firebase的项目,我有两个用户类型“doctor”和“patient”。我已经能够建立一个完美的注册和登录系统。目前,如果您注册为医生,则会转到医生页面,如果您注册为患者,则会转到患者页面。我还设置了一旦你启动了应用程序,如果你已经登录,你跳过登录/注册页面并直接转到主页。
我的问题是,无论您是以医生还是患者身份登录,它都会在启动时自动切换到患者主页。我正在尝试检查当前用户ID是否是数据库中“Patient”节点下的用户ID,然后切换到患者主页,否则如果当前用户ID位于数据库中的“Doctor”节点下然后转到医生主页,否则打印本地错误到控制台。这是我目前坚持的地方,任何帮助或指导将不胜感激。
这是我当前的代码,如果您在启动应用时登录并且它位于初始视图控制器上,则会自动将您分到主页:
FIRAuth.auth()?.addStateDidChangeListener({ (auth, user) in
if user != nil{
print("User is signed in.")
//send the user to the PatientHomeViewController
let mainStoryboard: UIStoryboard = UIStoryboard(name:"Main",bundle:nil)
let PatientHomeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "PatientHomeViewController")
//send the user to the patient homepage
self.present(PatientHomeViewController, animated: true, completion: nil)
}
})
提前谢谢你们。
答案 0 :(得分:1)
我已经找到了解决问题的方法。我知道它不是最好的解决方案,但经过大量测试后,它运行良好,没有任何问题。如果其他人有类似的问题,我用来修复我的问题并能够检查两种类型用户的代码是:
let rootRef = FIRDatabase.database().reference()
FIRAuth.auth()?.addStateDidChangeListener({ (auth, user) in
if(user != nil){
rootRef.child("Patients").child((user?.uid)!).observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in
if(snapshot.exists()) {
print("Patient is signed in.")
let mainStoryboard: UIStoryboard = UIStoryboard(name:"Main",bundle:nil)
let patientHomeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "PatientHomeViewController")
self.present(patientHomeViewController, animated: true, completion: nil)
} else {
print("Doctor is signed in.")
let mainStoryboard: UIStoryboard = UIStoryboard(name:"Main",bundle:nil)
let doctorHomeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "DoctorHomeViewController")
self.present(doctorHomeViewController, animated: true, completion: nil)
}
})
}
})
如果有人有更好的方法来编写此代码,请随时将其添加为注释。
感谢。