javascript - Firebase user.updateProfile({...}) 在 React App 中不起作用

标签 javascript reactjs firebase firebase-authentication

所以,我有这个 ReactJS 应用程序,有一个用户数据库,

创建用户的函数是这样的

import { ref, firebaseAuth } from './../Components/config'

export function auth (email, pw) {
  return firebaseAuth().createUserWithEmailAndPassword(email, pw)
    .then(saveUser)
}
export function saveUser (user) {
  return ref.child(`users/${user.uid}/info`)
    .set({
      email: user.email,
      uid: user.uid,
      number: "" //custom
    })
    .then(() => user)
}

如您所见,用户由 3 个属性组成,电子邮件、uid 和一个自定义数字属性(最初为“”)

我有一个

changeNumberToNew = (n) =>{
    var user = firebase.auth().currentUser;
      if (user != null) {
          user.updateProfile({
            number: n
          }).then(() => {
            console.log("Number changer");
          }).catch((error) => {
            console.log(error);
          });
      } else {
        console.log("No user")
      }
  };

和一个调用函数的按钮

<button onClick={this.changeNumberToNew(4)}>Click to change number</button>

当我点击按钮时, promise 是导致执行的解析器

console.log("Number changer")

但是当我去查看 firebase 数据库对象时..没有任何变化,即使重新加载并等待仍然没有任何变化

最佳答案

我认为这里的问题是您将数据库中的用户对象与身份验证模块中的用户混淆了。他们不一样。

当您在第一个 block 中说以下内容时,您将用户的“副本”保存到数据库中。

ref.child(`users/${user.uid}/info`)
    .set({
      email: user.email,
      uid: user.uid,
      number: ""
    })

然后在第二段代码中,您尝试更新身份验证模块中的当前用户。不好。您应该更新数据库,而不是身份验证模块。

var user = firebase.**auth()**.currentUser

if (user != null) {
  user.updateProfile({...})
}

我认为您不能在身份验证模块中为当前用户创建自定义字段。 updateProfile() 用于更新您默认从提供商处获取的字段,例如电子邮件、显示名称、照片 URL 等。您不能创建新字段。

您应该在您的数据库 中更新用户的副本,然后在您需要“number”的值时引用它。

你改变函数应该更像是......

changeNumberToNew = (n) => {
    var user = firebase.auth().currentUser;
    if (user) {
     ref.child(`users/${user.uid}/info`).update({number: n})
     .then(() => console.log("Number changer"))
     .catch(error => console.log(error))
    } else {
      console.log("No user")
    }
}

关于javascript - Firebase user.updateProfile({...}) 在 React App 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47487388/

相关文章:

javascript - 使用较大参数时,平滑滚动功能会出现故障

javascript - React onChange 文本输入将光标移动到输入字段中的文本末尾

ios - FirebaseUI 和 SDWebImage 在 CollectionViewControllerCell 的 for 循环中显示图像

android - Firebase 多个子监听器

android - Android 库中的 Firebase 依赖项 : Cannot invoke method get() on null object

javascript - IP 地址中的国家/地区名称

javascript - 修改从空白已呈现可见的网页复制文本的方式

javascript - 从内部函数添加事件函数并传递元素时出现奇怪的行为

reactjs - Redux connect 的 mapStateToProps 的正确类型声明 (TypeScript 2)

javascript - 如何突出显示字符串中的文本?