Firebase使用电子邮件,密码,显示名称和照片网址创建用户

时间:2016-07-15 06:35:36

标签: ios swift firebase firebase-authentication

根据Firebase网站,我使用此代码创建新用户:

firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {});

如何在创建新用户时向Auth添加显示名称和照片网址?

link显示从身份验证提供程序返回的支持的用户数据

6 个答案:

答案 0 :(得分:18)

您可以使用FIRUserProfileChangeRequest课程更新您的个人资料..查看this Doc.

let user = FIRAuth.auth()?.currentUser
   if let user = user {
      let changeRequest = user.profileChangeRequest()

      changeRequest.displayName = "Jane Q. User"
      changeRequest.photoURL =
          NSURL(string: "https://example.com/jane-q-user/profile.jpg")
      changeRequest.commitChangesWithCompletion { error in
        if let error = error {
          // An error happened.
        } else {
          // Profile updated.
        }
      }
    }

答案 1 :(得分:1)

更改/添加显示名称:

user!.createProfileChangeRequest().displayName = "Your name"

更改/添加photoURL

user!.createProfileChangeRequest().photoURL = URL(string: "image url")

答案 2 :(得分:0)

您可以按照以下方式解决问题。

1)使用以下语句创建用户。

firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {});

2)上述声明的成功请验证此用户如下。

     self.rootRef.authUser(email, password)
 // USER_ID = Here you get user_ID

3)上述功能的成功将用户名和个人资料图片设置为如下用户。

  usersRef.updateChildValues(dict, withCompletionBlock:

- 这里userRef包含你的userDetails / USER_ID

可能会为你工作。 我有代码,但适用于较旧的firebase版本,所以不适合你,否则我与你分享。

答案 3 :(得分:0)

我认为您的意思是在Auth之后将显示名称和照片网址添加到Firebase数据库。这几乎就是我在相同注册时所做的一切。

   if let email = emailField.text where email != "", let pwd = passwordField.text where pwd != ""{

        FIRAuth.auth()?.createUserWithEmail(email, password: pwd, completion: { (user, error) in
            if error != nil {
                print("DEVELOPER: Unable to authenticate with Firebase using email")
            }else {
                print("DEVELOPER: Successfully authenticated with Firebase using email")
                if let user = user {
                    let userData = ["provider": user.providerID, "userName": "\(user.displayName)", "profileImg": "\(user.photoURL)"]
                    self.completeMySignIn(user.uid, userData: userData)
                }
            }
        })

     } else {
       // Email and Password where not filled in
    }
}

现在在DB中添加您的个人资料图片和用户用户名

func completeMySignIn(id: String, userData: Dictionary<String, String>){
    {YourFirebaseUserURL}.updateChildValues(userData)
}

答案 4 :(得分:0)

我认为这应该为您解决问题,如果您还有其他需要,请告诉我。或对此有任何其他疑问。

    func handleSignUp() {
    guard let userName = userNameTF.text else { return }
    guard let email = emailTF.text else { return }
    guard let password = passwordTF.text else { return }
    guard let image = profileImage.image else { return }

    continueButton.setBackgroundImage(#imageLiteral(resourceName: "inactiveButtonBG"), for: .normal)
    activityIndicator.startAnimating()

        Auth.auth().createUser(withEmail: email, password: password) { user, error in
            if error == nil && user != nil {
                print("User created!")
                self.uploadProfileImage(image: image) { url in

                    if url != nil {
                        let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
                        changeRequest?.displayName = userName
                        changeRequest?.photoURL = url

                        changeRequest?.commitChanges { error in
                            if error == nil {
                                self.saveProfile(username: userName, profileImageURL: url!) { success in
                                    if success {
                                        print("Success upload of profile image")
                                        self.dismiss(animated: true, completion: nil)
                                    }
                                }
                                self.dismiss(animated: true, completion: nil)
                            } else {
                                guard let message = error?.localizedDescription else { return }
                                self.userAlert(message: message)
                            }
                        }
                    } else {
                        self.userAlert(message: "Unable to load profile image to Firebase Storage.")
                    }
                }

                self.dismiss(animated: true, completion: nil)
            } else {
                guard let message = error?.localizedDescription else { return }
                self.userAlert(message: message)
            }
        }

}

答案 5 :(得分:0)

您可以完全根据自己的目的使用Firebase Admin SDK中的Firebase Function,即在创建用户时填写其他用户属性:

const admin = require("firebase-admin");

// Put this code block in your Firebase Function:
admin.auth().createUser({
        email: email,
        emailVerified: false,
        password: password,
        displayName: `${fname} ${lname}`,
        disabled: false
    })

但是使用Firebase Admin SDK创建用户可能会给您发送电子邮件验证的问题,因为Promise不会返回具有User方法的sendEmailVerification()对象。您最终可能需要使用Firebase客户端API(如您自己的代码所示)来创建用户和update the user profile,然后发送电子邮件验证:

var user = firebase.auth().currentUser;

user.updateProfile({
  displayName: "Jane Q. User",
  photoURL: "https://example.com/jane-q-user/profile.jpg"
}).then(function() {
  // Update successful.
}).catch(function(error) {
  // An error happened.
});

在发送电子邮件验证之前更新displayName是有意义的,这样,当出现以下情况时,Firebase电子邮件模板将以专有名称而不是 Hello (听起来像垃圾邮件)向新用户打招呼。 displayName未设置。