在iOS和Firebase中为适当的用户保存登录状态

时间:2019-04-17 10:45:34

标签: ios swift firebase firebase-authentication

我正在开发的应用程序上仅针对不同用户使用一个登录屏幕,并且添加了代码以保存已登录的用户,以便用户下次打开应用程序时无需再次登录。但是事实上,我有不同的用户,我只能将用户发送到一个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”

2 个答案:

答案 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")