繁体   English   中英

Firebase 通过 REST 使用变量写入数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM