我在正在开发的应用程序上为不同用户仅使用一个登录屏幕,并且添加了一段代码来保存登录用户,以便用户下次打开应用程序时不必再次登录。但事实上,我有不同的用户,我只能将用户发送到一个 segue。
我尝试添加代码以保持用户登录状态,但是如果我使用另一个用户登录,它会将用户发送到与以前相同的 View Controller 。这是我尝试过的:
override func viewDidAppear(_ animated: Bool) {
if Auth.auth().currentUser != nil {
// User is signed in.
performSegue(withIdentifier: "studentSegue", sender: self)
} else {
// No user is signed in.
return
}
}
我试图让不同用户保持登录状态,但我不确定要使用什么代码。为了区分登录页面上的用户,我使用 switch case 来查找用户“类型”并登录。但我想让适当的用户保持登录状态。任何帮助将不胜感激
编辑:我想说的是,如果两个人使用不同的手机尝试登录,假设学生(手机 A)和老师(手机 B)他们应该只登录一次,而不必在关闭时再次登录应用程序。但我的登录“PerformSegue”只能让我显示“studentSegue”
最佳答案
让我重述一下问题
在我的应用程序中,我有两种不同类型的用户:学生和教师。当学生登录或重新启动应用程序时,它应该通过 segue 将他们带到学生部分。当教师登录或重新启动应用程序时,应该通过 segue 将他们带到教师部分。
一些事情
Firebase 没有用户类型,只有用户 - 对于 Firebase,每个用户都与其他用户相同。您的应用代码和结构决定了差异。
一种解决方案是在应用启动时询问 Firebase 是什么类型的用户。这是一些通用代码:
override func viewDidAppear(_ animated: Bool) {
if Auth.auth().currentUser != nil {
let uid = currentUser.uid
let thisUserRef = fbRoot.child("users").child(uid)
thisUserRef.observeSingleEvent(..... {
let userType = //get userType from snapshot
if userType == "student" {
performSegue(withIdentifier: "studentSegue", sender: self)
} else {
performSegue(withIdentifier: "teacherSegue", sender: self)
}
}
} else {
// No user is signed in.
return
}
}
另一个选项是将 userType 存储在 userDefaults 中。因此,如果用户经过身份验证,请从默认值中获取用户类型并执行适当的转场。由于安全原因,我不太喜欢这种方法,但它确实可行。
关于ios - 在 IOS 和 Firebase 中保存适当用户的登录状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55725756/