Ios 如何使用firebase和Xcode将不同的用户发送到不同的视图控制器

Ios 如何使用firebase和Xcode将不同的用户发送到不同的视图控制器,ios,swift,firebase,firebase-authentication,Ios,Swift,Firebase,Firebase Authentication,我对编码相当陌生,并且已经开始使用firebase作为后端服务器,用于使用swift在Xcode中创建的应用程序 该应用程序本身将有一个登录页面,但有3种不同类型的用户。管理员将对其他2个用户具有不同的权限 我目前拥有的代码是: FIRAuth.auth()?.signIn(withEmail: username!, password: password!, completion: { (user, error) in if error == nil { let vc =

我对编码相当陌生,并且已经开始使用firebase作为后端服务器,用于使用swift在Xcode中创建的应用程序

该应用程序本身将有一个登录页面,但有3种不同类型的用户。管理员将对其他2个用户具有不同的权限

我目前拥有的代码是:

FIRAuth.auth()?.signIn(withEmail: username!, password: password!, completion: { (user, error) in
    if error == nil {
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "AdminVC")
        self.present(vc!, animated: true, completion: nil)                
    }
代码正在获取身份验证页面的电子邮件和密码。但是由于3种不同类型的用户,我不希望他们都进入“AdminVC”视图控制器


有没有办法让其他两个用户使用此身份验证方法转到自己的视图控制器?

如果要为用户存储类型,则必须使用数据库。这样地

用户登录时,从数据库中获取路径“users//type”的值。然后使用switch语句重定向到正确的视图控制器

这是完整的代码

 // Sign in to Firebase
 FIRAuth.auth()?.signIn(withEmail: "ntoonio@gmail.com", password: "Password123", completion: {
     (user, error) in
         // If there's no errors
         if error == nil {
             // Get the type from the database. It's path is users/<userId>/type.
             // Notice "observeSingleEvent", so we don't register for getting an update every time it changes.
             FIRDatabase.database().reference().child("users/\(user!.uid)/type").observeSingleEvent(of: .value, with: {
                 (snapshot) in

                 switch snapshot.value as! String {
                 // If our user is admin...
                 case "admin":
                     // ...redirect to the admin page
                     let vc = self.storyboard?.instantiateViewController(withIdentifier: "adminVC")
                     self.present(vc!, animated: true, completion: nil)
                 // If out user is a regular user...
                 case "user":
                     // ...redirect to the user page
                     let vc = self.storyboard?.instantiateViewController(withIdentifier: "userVC")
                     self.present(vc!, animated: true, completion: nil)
                 // If the type wasn't found...
                 default:
                     // ...print an error
                     print("Error: Couldn't find type for user \(user!.uid)")
                 }
            })
        }
    })

警告!如果找不到类型,此操作将崩溃。但这是可以解决的:)

您可以在else块中使用swich case语句块。将用户名与每个案例进行比较,并相应地准备vc。是否需要对任何单个用户执行此操作?不是每个用户,而是每种类型的用户。我想你们一共有5种类型?3个用户类型和2个管理员类型?然后设置5个案例,将登录名与用户类型进行比较,并相应地显示vc。如果我错了,请纠正我。对不起,我在问题中不清楚,我将有3种类型的用户。管理员、教师和学生,因为身份验证页面只显示电子邮件和密码,我不知道如何将他们区分为3个不同的用户。在这种情况下,是否会使用swift代码查看哪些电子邮件已登录?因为我也是firebase的新手,我也发现很难将数据添加到数据库部分,因为这是我第一次使用JSON树。是否可以向我展示如何在数据库中输入用户类型。在switch语句中,如果触发默认块,则表示没有数据(因为我们将只输入“admin”或“user”,您可以添加任意数量的类型),这是一个新用户。在这里,您可以使用FIRDatabase.database().reference().child(“users”).child(user.uid).setValue([“type”:“])设置类型。如果我通过firebase控制台手动将数据输入数据库,该怎么办?这仍然有效吗?是的,这会更有意义,因为你不希望用户能够选择成为管理员:)这是一个话题。如果您有任何进一步的问题,您可以查看我的个人资料,以获得与我联系的其他方式:)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "\(snapshot.value)_View")
self.present(vc!, animated: true, completion: nil)