захватить текущих пользователей имя облако FireBase Swift - PullRequest
1 голос
/ 20 октября 2019

У меня есть Firebase Auth, которая хранит пользователей, но также создает коллекцию пользователей в базе данных Cloud Firestore. Я могу получить имя пользователя, но проблема в том, что он всегда добавляется последним.

Вот моя функция в swift

func welcomeName() {

    let db = Firestore.firestore()
    if let userId = Auth.auth().currentUser?.uid {

    var userName = db.collection("users").getDocuments() { (snapshot, error) in
        if let error = error {
            print("Error getting documents: \(error)")
    } else {
        //do something
            for document in snapshot!.documents {
        var welcomeName = document["firstname"] as! String
        self.welcomeLabel.text = "Hey, \(welcomeName) welcome!"
                }
            }
        }
    }
}

в облаке Firebase мойпользователи сохраняются как

начальная коллекция - "пользователи"

добавить документ с автоматическим идентификатором

, затем коллекция -

имя "Джейн"

фамилия "Доу"

uid "IKEPa1lt1JX8gXxGkP4FAulmmZC2"

есть идеи?

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Когда вы просматриваете список всех пользовательских документов, он покажет firstName последнего пользователя на ярлыке. Возможно, вы захотите показать первого пользователя, как показано ниже,

if let firstUserDoc = snapshot?.documents.first {
   var welcomeName = firstUserDoc["firstname"] as! String
   self.welcomeLabel.text = "Hey, \(welcomeName) welcome!"
}

Или это может быть для текущего пользователя, если uid в списке совпадает с userId,

if let currentUserDoc = snapshot?.documents.first(where: { ($0["uid"] as? String) == userId }) {
   var welcomeName = currentUserDoc["firstname"] as! String
   self.welcomeLabel.text = "Hey, \(welcomeName) welcome!"
}
0 голосов
/ 21 октября 2019

Ваша коллекция пользователей должна выглядеть следующим образом

users (collection)
   uid_0 (document that's the users uid)
      first_name: "William"
   uid_1
      first_name: "Henry"
   uid_2

Затем, когда пользователь аутентифицируется, вы узнаете его uid, чтобы вы могли напрямую получать информацию из Firestore без запроса.

func presentWelcomeMessage() {
    if let userId = Auth.auth().currentUser?.uid {
        let collectionRef = self.db.collection("users")
        let thisUserDoc = collectionRef.document(userId)
        thisUserDoc.getDocument(completion: { document, error in
            if let err = error {
                print(err.localizedDescription)
                return
            }
            if let doc = document {
                let welcomeName = doc.get("first_name") ?? "No Name"
                print("Hey, \(welcomeName) welcome!")
            }
        })
    }
}

Если пользователь войдет в систему, это будет напечатано на консоли

Привет, Уильям, добро пожаловать!

...