0

大约 4 天前,我开始使用 Firebase。虽然我没有保持一致。我想在数据库中创建一个用户,尽管用户已成功创建。创建用户后,假设返回头像页面,此阶段失败。

作为这个领域的初学者,我想知道我应该做对什么。

  adduser(newuser) {
    var promise = new Promise((resolve, reject)=> {
      this.afireauth.auth.createUserWithEmailAndPassword(newuser.email, newuser.password).then(()=> {
        this.afireauth.auth.currentUser.updateProfile({
          displayName: newuser.displayName,
          photoURL: this.mydefaultprofilepic.defaultProfileImage
        }).then(()=> {
          this.firedata.child(this.afireauth.auth.currentUser.uid).set({
            displayName: newuser.displayName,
            photoURL: this.mydefaultprofilepic.defaultProfileImage
          }).then(()=> {
            resolve({success: true})
          }).catch((error)=> {
            reject(error);
          })
        }).catch((error)=> {
          reject(error);
        })
      }).catch((error)=> {
        reject(error);
      })
    })
    return promise;
  }

这是我得到的错误

ERROR Error: Uncaught (in promise): Error: Reference.set failed: First argument contains undefined in property 'chatusers.AbdvZoGgqwNJcPfOpPKLqmCT1T12.photoURL'
Error: Reference.set failed: First argument contains undefined in property 'chatusers.AbdvZoGgqwNJcPfOpPKLqmCT1T12.photoURL'
    at Object.exports.validateFirebaseData (vendor.js:38911)
    at vendor.js:38957
    at Object.exports.forEach (vendor.js:76671)
    at Object.exports.validateFirebaseData (vendor.js:38940)
    at Object.exports.validateFirebaseDataArg (vendor.js:38899)
    at Reference.set (vendor.js:63235)
    at main.js:45
    at e.g (vendor.js:76794)
    at Eb (vendor.js:76797)
    at Ab (vendor.js:76797)
    at Object.exports.validateFirebaseData (vendor.js:38911)
    at vendor.js:38957
    at Object.exports.forEach (vendor.js:76671)
    at Object.exports.validateFirebaseData (vendor.js:38940)
    at Object.exports.validateFirebaseDataArg (vendor.js:38899)
    at Reference.set (vendor.js:63235)
    at main.js:45
    at e.g (vendor.js:76794)
    at Eb (vendor.js:76797)
    at Ab (vendor.js:76797)
    at c (polyfills.js:3)
    at c (polyfills.js:3)
    at polyfills.js:3
    at t.invokeTask (polyfills.js:3)
    at Object.onInvokeTask (vendor.js:5114)
    at t.invokeTask (polyfills.js:3)
    at r.runTask (polyfills.js:3)
    at o (polyfills.js:3)
    at e.invokeTask [as invoke] (polyfills.js:3)
    at p (polyfills.js:2)
defaultErrorLogger @ vendor.js:1822

我已经搜索了关于 SO 的其他类似问题,但他们没有直接解决这种情况

4

1 回答 1

0

(我不确定我的答案,这只是一个线索,所以请记住这一点)

我的猜测是您正在尝试在它不属于的地方添加一些逻辑。

当我谈到 Firebase 身份验证时,我看到的是 google 登录、facebook 登录……以及电子邮件登录。

对于这两个前者,您的帐户上有一张个人资料图片。这些图片是您的 Google+ 图片和您的 Facebook 个人资料图片。

但是,在后者的情况下,您没有图片。

在所有情况下,您都无法更改图片。这似乎很明显:您可以使用您的帐户登录,但您无法在其他应用程序中管理您的帐户设置。这将导致一些严重的安全问题。

如果您想让您的用户处理他们的个人资料图片,那么您应该管理文档存储:当您的用户注册您的网站时,为他创建一个文档。然后,当他想更改其头像时,将图片上传到存储中,并将 URL 放入文档中。

Firebase 的模块之间有一个非常明确的区别:auth用于管理用户,firestore用于存储数据,而storage用于处理文件。

于 2018-04-16T07:26:03.840 回答