所以,我有这个 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/