繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM