[英]Firebase writing data with variable via REST
在我的应用程序中,我通过以下方式获取当前用户的 uid:我还从以下位置获取用户名:console.log 给了我正确的名称。 但是当我尝试通过以下方式写入我的数据库时: https://movieapp-8a157.firebaseio.com/users/${username}/${authUser}/posts.json?auth=${token}
它不起作用。 如果我删除 ${username} 它将写入正确的路径。 有任何想法吗? 为了更清楚,我编辑了我的帖子。
export const postJob = data => {
return async (dispatch, getState) => {
const randomColors = ["#f3a683"];
const colorNumber = Math.floor(Math.random() * 20) + 1;
const bgColor = randomColors[colorNumber];
const val = getState();
const userId = val.auth.userId;
const rules = {
description: "required|min:2"
};
const messages = {
required: field => `${field} is required`,
"description.min": "job description is too short"
};
try {
await validateAll(data, rules, messages);
const token = await firebase
.auth()
.currentUser.getIdToken(true)
.then(function(idToken) {
return idToken;
});
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
var displayName = user.displayName;
var email = user.email;
var emailVerified = user.emailVerified;
var photoURL = user.photoURL;
var isAnonymous = user.isAnonymous;
var uid = user.uid;
var providerData = user.providerData;
// ...
} else {
// User is signed out.
// ...
}
});
var user = firebase.auth().currentUser;
const authUser = user.uid;
const username = await firebase
.database()
.ref("users/" + authUser + "/name")
.once("value", function(snapshot) {
console.log("################", snapshot.val());
});
//console.log("#####################", authUser);
const response = await fetch(
`https://movieapp-8a157.firebaseio.com/users/${username}/${authUser}/posts.json?auth=${token}`,
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
titel: data.titel,
fname: data.fname,
description: data.description,
cover: data.cover,
friend: data.friend,
ownerId: userId,
bgColor: bgColor
})
}
);
const resData = await response.json();
您获取 UID 的代码没有按照您期望的方式工作。 auth 状态侦听器是异步的,并且在accessesfirebase.auth().currentUser
的代码行之后触发。 这行代码实际上是在登录完成之前为您提供当前用户。 这意味着它将是未定义的。
然后,您将使用该未定义值来构建对数据库中某个位置的引用。 这导致实际引用与您期望的不同。 您应该添加调试日志以自己查看。
您应该使用回调来确定用户登录的确切时间,并且只读取和写入该用户的位置。 这意味着当您知道user
是正确的时,您可能应该将写入数据库的代码行移动到回调中,并使用user.uid
构建用于读取和写入的数据库引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.