Данные формы регистрации не хранятся на базе Firebase, кроме изображения - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь создать регистрационную форму в act-native , используя Firebase . Я использовал библиотеки Fetch Blob и Document Picker для получения изображения и загрузить это в 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 Console enter image description here

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Я решил эту проблему. Проблема была в этом куске кода.

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

setState не работал и обратный вызов не был запущен. И я сделал это так

1009 *
0 голосов
/ 09 февраля 2020

Являются ли "Правила" в базе данных разрешением "Записать"

  1. Go в консоль Firebase и открыть ваш проект.
  2. Go в базу данных и найдите вкладку «Правила».
  3. Проверьте, установлены ли правила, как указано ниже

{/ * Посетите https://firebase.google.com/docs/database/security, чтобы узнать больше о правилах безопасности. * / "rules": {".read": true, ".write": true}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...