除图像外,注册表单数据未存储在 firebase 上

Sign up form data is not storing on firebase except the image

我正在尝试使用 Firebasereact-native 中创建注册表单。我使用了 Fetch BlobDocument Picker 库,用于获取图像并将其 上传 到 firebase。我还尝试将用户的 姓名、电子邮件和密码 保存在 实时数据库 中。但不幸的是,除了 图像被上传 firebase 存储 .

之外,用户数据不会保存在数据库中

这是我的 Firebase 授权码

 handleSignupOnPress = () => {
    const {image, email, password} = this.state;
    let validation = this.validateData();
    console.warn(validation);
    if (validation == true) {
      this.toggleLoading();
      firebaseService
        .auth()
        .createUserWithEmailAndPassword(email, password)
        .then(() => {
          // console.warn("User SignUp Successfully");
          this.uploadImage(image);
        })
        .catch(error => {
          this.toggleLoading();
          var errorCode = error.code;
          var errorMessage = error.message;
          alert(errorMessage);
          // console.warn("ERROR => ", errorCode, errorMessage);
        });
    }
  };

这是图片上传代码

 // First Uploading image and download Image URI then call saveUserToDB()...
  uploadImage(uri, mime = 'image/jpeg') {
    return new Promise((resolve, reject) => {
      const uploadUri =
        Platform.OS === 'ios' ? uri.replace('file://', '') : uri;
      let uploadBlob = '';

      const imageRef = firebaseService
        .storage()
        .ref('images')
        .child(uuid.v4());

      fs.readFile(uploadUri, 'base64')
        .then(data => {
          return Blob.build(data, {type: `${mime};BASE64`});
        })
        .then(blob => {
          uploadBlob = blob;
          return imageRef.put(blob, {contentType: mime});
        })
        .then(() => {
          uploadBlob.close();

          const downnloadImageURI = imageRef.getDownloadURL().then(url => {
            this.setState(
              {
                imageURI: url,
              },
              () => {
                alert('ImageURI ==> ', this.state.imageURI);
                this.saveUserInfo();
              },
            );
          });
          return downnloadImageURI;
        })
        .then(url => {
          resolve(url);
        })
        .catch(error => {
          this.toggleLoading();
          reject(error);
        });
    });
  }

这是保存用户数据的代码

saveUserInfo = () => {
    const {userName, email, password, imageURI} = this.state;
    const {navigate} = this.props.navigation;
    const uid = firebaseService.auth().currentUser.uid;
    const params = {
      image: imageURI,
      username: userName,
      email: email,
      password: password,
    };
    //firebaseService.database().ref('/Users').push(params)
    firebaseService
      .database()
      .ref('/Users')
      .child(uid)
      .set(params)
      .then(res => {
        this.toggleLoading();
        navigate('Login');
      })
      .catch(err => {
        alert(err);
      });
  };

以下是 Firebase 控制台的屏幕截图

数据库中的 "Rules" 是否获得 "Write"

的权限
  1. 转到 firebase 控制台并打开您的项目。
  2. 转到数据库并搜索 "Rules" 选项卡。
  3. 检查规则设置如下

{ /* 访问 https://firebase.google.com/docs/database/security 以了解有关安全规则的更多信息。 */ "rules":{ “.read”:是的, “.write”:真 } }

我已经解决了这个问题。问题出在这段代码中。

 const downnloadImageURI = imageRef.getDownloadURL().then(url => {
            this.setState(
              {
                imageURI: url,
              },
              () => {
                alert('ImageURI ==> ', this.state.imageURI);
                this.saveUserInfo();
              },
            );

setState 没有工作并且 calback 没有被触发。 而且我是这样做的

  const downnloadImageURI = imageRef.getDownloadURL().then(url => {
               this.saveUserInfo(url)
                );}