Как быстро получить доступ к полю firebase? - PullRequest
0 голосов
/ 09 июля 2020

У меня такой код:

        let user = Auth.auth().currentUser
        let username2 = user?.username
        self.username?.text = username2

Хотя где написано user ?. Я получаю множество всплывающих опций, таких как номер телефона, адрес электронной почты, displayName, providerId и т. Д. c, хотя опция для имени пользователя не появляется. Вот моя база: введите описание изображения здесь Я бы сказал, что я неправильно обращаюсь к полям, хотя опция для uid появляется. Когда я ввожу имя пользователя, в нем написано

Value of type 'User' has no member 'username'

Что я делаю не так?

EDIT

        let user = Auth.auth().currentUser
        let uid = user?.uid
        let db = Firestore.firestore()
        let docRef = db.collection("users").document(uid!)

        docRef.getDocument { (document, error) in
                let username2 = document?.get("username")
                self.username?.text = username2 as? String
        }

1 Ответ

1 голос
/ 09 июля 2020

Auth.auth().currentUser в вашем коде определяет пользователя, который вошел в систему с помощью аутентификации Firebase.

На снимке экрана в вашем вопросе показан документ из базы данных Cloud Firestore.

Хотя оба продукта являются частью Firebase, вы не можете получить доступ к документам в Firestore через Firebase Authentication API.

Если вы хотите получить доступ к документу на скриншоте, используйте Firestore API, который задокументирован здесь .

В загрузить документ для пользователя, который в данный момент вошел в систему аутентификации Firebase, это будет примерно так:

let user = Auth.auth().currentUser
let uid = user.uid

let docRef = db.collection("users").document(uid)

docRef.getDocument { (document, error) in
    if let document = document, document.exists {
        let username2 = document.get("username")
        ...
    } else {
        print("Document does not exist")
    }
}

Обновление * Теперь я заметил, что у вас есть UID пользователя внутри документа. В этом случае вам нужно использовать запрос , чтобы найти документы, которые соответствуют значению UID:

db.collection("users").whereField("uid", isEqualTo: uid)
    .getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                let username2 = document.get("username")
                self.username?.text = username2 as? String
            }
        }
}

Поскольку в этом случае может быть несколько документов с UID, так что вам придется l oop и разобраться с этим.

Пожалуйста, также прочтите ссылки, которые я добавил, так как большая часть из них копируется / вставляется оттуда, и мои знания Swift невелики.

...