[英]Save Logged in state for appropriate user in IOS and Firebase
我正在为我正在开发的应用程序中的不同用户使用一个登录屏幕,并且我添加了一个代码来保存登录用户,以便用户下次打开应用程序时无需再次登录。 但事实上,我有不同的用户,我只能将用户发送到一个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
}
}
我试图让用户登录不同的用户,但我不确定要使用什么代码。 为了区分登录页面上的用户,我使用了switch case来查找用户“Type”并登录。 但我希望保持适当的用户登录。任何帮助将不胜感激
编辑:我想说的是,如果两个人在不同的手机上尝试登录,可以说学生(电话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中。 因此,如果用户已经过身份验证,请从默认值中获取用户类型并执行相应的segue。 由于安全性,我不是这种方法的忠实粉丝,但它可以工作。
经过相当多的尝试后,我自己找到了答案。 所以我做的是每次用户登录时都用UserDefaults.standard.set(1, forKey: "isLoggedIn")
设置一个整数。我为学生设置数字1,为教师设置数字2,在viewDidAppear中我这样做:
override func viewDidAppear(_ animated: Bool) {
if UserDefaults.standard.float(forKey: "isLoggedIn") == 1 {
self.performSegue(withIdentifier: "studentSegue", sender: self)
}
if UserDefaults.standard.float(forKey: "isLoggedIn") == 2 {
self.performSegue(withIdentifier: "lecturerSegue", sender: self)
}
else{
return
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.