我正在开发的应用程序上仅针对不同用户使用一个登录屏幕,并且添加了代码以保存已登录的用户,以便用户下次打开应用程序时无需再次登录。但是事实上,我有不同的用户,我只能将用户发送到一个segue。
我尝试添加代码以使用户保持登录状态,但是如果我与其他用户登录,它将把用户发送到与以前相同的视图控制器。这是我尝试过的:
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
}
}
我正在尝试让其他用户登录,但是我不确定要使用什么代码。为了区分登录页面上的用户,我使用了开关箱来查找用户“ Type”并登录。但我想让适当的用户保持登录状态。任何帮助将不胜感激
编辑:要说的是,如果两个人在不同的电话上尝试登录,然后说学生(电话A)和老师(电话B),他们应该只登录一次,而不必在关闭电话时再次登录。应用程式。但是我的登录名“ PerformSegue”只允许我显示“ studentSegue”
答案 0 :(得分:0)
让我重申一下这个问题
在我的应用中,我有两种不同类型的用户,即学生和教师。当学生登录或重新启动应用程序时,应通过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中。因此,如果对用户进行了身份验证,请从默认值中获取用户类型并执行适当的命令。由于安全性,我不是这种方法的忠实拥护者,但是它可以起作用。
答案 1 :(得分:0)
尝试了很多之后,我自己找到了答案。因此,我每次用户登录时都会用Graad
设置一个整数。我为学生设置了数字1,为老师设置了数字2,在viewDidAppear中,我这样做:
UserDefaults.standard.set(1, forKey: "isLoggedIn")