Reference.set failed:第一个参数在属性中包含undefined。火基离子

时间:2018-04-16 07:03:07

标签: angular firebase firebase-realtime-database ionic3 failed-to-connect

我大约4天前开始使用Firebase。虽然我没有保持一致。我想在db中创建用户,尽管用户已成功创建。在用户创建之后,假设返回个人资料图片页面,它在此阶段失败。

作为这个领域的初学者,我想知道自己要做什么。

  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上搜索过其他类似的问题,但他们没有直接解决这种情况

1 个答案:

答案 0 :(得分:0)

(我不确定我的答案,它只是一个领先,所以记住这一点)

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

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

如果是两个人,您的帐户上会有个人资料照片。这些图片是您的Google+图片和Facebook个人资料图片。

但是,就后者而言,你没有照片。

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

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

Firebase在其模块之间有明显区别: auth 用于管理用户, firestore 用于存储数据,存储用于存储数据处理文件。