簡體   English   中英

Swift Firebase - 使用個人資料照片進行用戶注冊

[英]Swift Firebase - User Registration with Profile Photo

我想弄清楚如何注冊用戶信息並添加個人資料照片。 問題是 Firebase 文檔只提供了使用電子郵件和密碼創建用戶的方法,它可以工作,但是我該如何注冊更多信息?

func createNewUser(name: String, email: String, phone: String, photo: UIImage, password: String, onCompletion: @escaping (Bool, RequestErrors?) -> Void) {
    Auth.auth().createUser(withEmail: email, password: password) { (result, error) in
        if let error = error {
            print("Login error: \(error.localizedDescription)")
            onCompletion(false, .authError)
            return
        }
        onCompletion(true, nil)
    }
}

我通過參數將信息傳遞給這個函數,但我不知道如何繼續。 有什么幫助嗎?

要為用戶存儲更多信息,您需要使用 Firebase 數據庫或 Firestore。 您必須在 pod 文件中添加一個。

例如,以下是在數據庫中為用戶設置電子郵件的工作方式

var ref: DatabaseReference!

ref = Database.database().reference()

self.ref.child("users").child(user.uid).setValue(["email": user's email])

對於圖像存儲,您需要使用 Storage,它的工作原理類似。 您還需要更新您的 pod 文件。 您將創建一個引用來存儲圖像。 所以像 users/profilepics/uid.jpg 這樣你就有一個上傳任務將圖像上傳到參考。 有關更多信息,請查看 Firebase 存儲文檔。

這就是最終的代碼。

func createNewUser(name: String, email: String, phone: String, photo: UIImage, password: String, onCompletion: @escaping (Bool, RequestErrors?) -> Void) {
    Auth.auth().createUser(withEmail: email, password: password) { (result, error) in
        if let error = error {
            print("Login error: \(error.localizedDescription)")
            onCompletion(false, .authError)
            return
        }

        let imageName = UUID().uuidString
        let storageRef = Storage.storage().reference().child("profile_images").child("\(imageName).jpg")

        guard let uid = result?.user.uid else { return }

        if let uploadData = photo.jpegData(compressionQuality: 0.1) {
            storageRef.putData(uploadData, metadata: nil, completion: { (_, error) in
                if let error = error {
                    print(error)
                    return
                }
                storageRef.downloadURL(completion: { (url, error) in
                    if let error = error {
                        print(error)
                        return
                    }
                    guard let photoUrl = url else { return }
                    let values = ["displayName": name, "email": email, "phoneNumber": phone, "photoURL": photoUrl.absoluteString]
                    let ref = Database.database().reference()
                    let usersReference = ref.child("users").child(uid)
                    usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
                        if err != nil {
                            print(err!)
                            return
                        }
                        User.shared = User(uid: uid, displayName: name, email: email, phoneNumber: phone, photoURL: photoUrl)
                        onCompletion(true, nil)
                    })
                })
            })
        }
    }

當我獲得我需要的所有數據時,我會填寫我的用戶單例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM