【问题标题】:Firebase create user with email, password, display name and photo urlFirebase 使用电子邮件、密码、显示名称和照片网址创建用户
【发布时间】:2016-11-18 06:20:47
【问题描述】:

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

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

如何在创建新用户时将显示名称和照片 URL 添加到 Auth?

这个link 显示了从身份提供者返回的受支持的用户数据。

【问题讨论】:

    标签: ios swift firebase firebase-authentication


    【解决方案1】:

    您可以使用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.
            }
          }
        }
    

    【讨论】:

    • 在使用邮箱和密码创建新用户时,不能同时添加显示名和照片地址吗?
    • no ....没有其他办法...创建后您需要更新您的用户资料
    • 我现在可以从代码中获取 displayName 和 photoUrl。这两个字段未显示在 Firebase 身份验证控制台中。应该是这样的吗?
    【解决方案2】:

    您只需按以下方式解决您的问题。

    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】:

      我认为您的意思是在身份验证后将显示名称和照片网址添加到 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
          }
      }
      

      现在在此处将您的个人资料图片和用户名添加到数据库中

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

      【讨论】:

        【解决方案4】:

        更改/添加显示名称:

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

        更改/添加照片网址

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            您可以完全将Firebase Function 中的Firebase Admin SDK 用于您的目的,即在创建用户时填充其他用户属性:

            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 创建用户可能会给您发送电子邮件验证问题,因为该承诺不会返回具有 sendEmailVerification() 方法的 User 对象。您最终可能需要使用 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 电子邮件模板会在@ 987654329@ 未设置。

            【讨论】:

              猜你喜欢
              • 2020-06-22
              • 2016-12-15
              • 2017-07-02
              • 2018-03-28
              • 2018-03-12
              • 2016-11-27
              • 2020-10-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多