Swift Firebase-带有个人资料照片的用户注册

时间:2019-06-24 18:12:21

标签: ios swift

我正在尝试弄清楚如何注册用户信息和添加个人资料照片。 问题是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)
    }
}

我正在通过参数将信息传递给此函数,但我不知道如何进行。 有帮助吗?

2 个答案:

答案 0 :(得分:0)

要为用户存储更多信息,您需要使用Firebase数据库或Firestore。您必须在pod文件中添加一个。

例如,这是在数据库中为用户设置电子邮件的方法

var ref: DatabaseReference!

ref = Database.database().reference()

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

对于图像存储,您需要使用存储,它的工作原理类似。您还需要更新pod文件。您将创建一个引用来存储图像。像users / profilepics / uid.jpg这样的东西,那么您将有一个上传任务,将图像上传到参考。有关更多信息,请参阅Firebase Storage文档。

答案 1 :(得分:0)

那是最终代码。

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)
                    })
                })
            })
        }
    }

当我获得所需的所有数据时,我将填写用户单例。