如何从我的应用程序当前登录用户的文档中检索信息?

时间:2019-09-01 17:10:35

标签: swift firebase google-cloud-firestore

注册/注册用户时,我将数据存储在每个用户文档的3个字段中:名称,电子邮件和用户名。 我有一个按钮,按此按钮会显示一个欢迎消息,例如:“ Hellow,(用户名)”,但这无法读取当前用户的用户名,即当前登录的用户,而是显示任何用户名其他随机用户。

我可以使用Firebase Auth阅读当前用户的电子邮件,即:

Auth.auth().currentUser?.email

但是我无法读取当前用户的用户名,我知道该用户名不会保存在Firebase的“身份验证”端。

这是我已经尝试过的代码:

func loadUserData() {
guard let email = Auth.auth().currentUser?.email else { return }
emailString = "\(email)"



self.db.collection("users").getDocuments { (snapshot, error) in
    if let err = error {
        print("Error: \(err)")
    } else {
        for document in snapshot!.documents {
            let emailRetrieved = document.get("email") as! String
            let usernameRetrieved = document.get("username") as! String

            print("ATTEN: 658")
            self.emailString = emailRetrieved
            print(self.emailString)
            self.usernameString = usernameRetrieved
            print(self.usernameString)

        }
    }
  }
}

这正是文档所建议的。上面的代码只是打印出电子邮件和“用户”集合下所有文档的用户名。

我的文档名称为“用户”,每个用户的信息都保存在其个人文档中,该名称即为用户ID,如果有帮助的话。如果有人可以提供帮助,我将非常感激,我在这个问题上已经停留了一段时间。

1 个答案:

答案 0 :(得分:0)

我建议您使用文档中的firebase auth或document-id本身的用户uid创建一个字段。在usersEndpoint.js下的repo中,看看exports.createUser

...
usersCollection.doc(userRecord.uid).set({
                uid: userRecord.uid,
                firstname: user.firstname,
                lastname: user.lastname,                
                dateOfBirth: user.dateOfBirth,
                sex: user.sex,
                city: user.city,
                activities: user.activities,
                offers: user.offers
            })
...

使用这种方法,您可以像这样更改代码:

func loadUserData() {
...
let uid= Auth.auth().currentUser?.uid

self.db.collection("users").get(uid) { (snapshot, error) in
    if let err = error {
        print("Error: \(err)")
    } else {
        ...
    }
  }
}

这样,您应该更容易获得用户的正确文档。

对不起,我的代码没有很快。我已经快编码了一段时间了。但我希望能有所帮助。

编辑

或者,您可以使用类似Firestore docs中所述的查询。看起来可能像这样:

...
guard let email = Auth.auth().currentUser?.email else { return }
emailString = "\(email)"

self.db.collection("users").whereField("email", isEqualTo: emailString)
    .getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                print("\(document.documentID) => \(document.data())")
            }
        }
}
...