无法在GoogleSignin signIn函数中调用firebase数据库函数

时间:2017-08-16 04:03:33

标签: javascript firebase react-native google-signin

我正在使用react-native-google-signin来实现谷歌登录功能。设置完所有配置步骤后,我就可以从GoogleSignin.signIn()获得“用户”。然后((用户)=> {...}。

现在,我想检查此用户是否已使用“此”Google帐户。因为如果是,我不需要在firebase数据库中创建用户数据。但如果不是(第一次),我需要在Google登录功能中创建用户数据。这是我的代码。

import fire from '../../firebase'

.. ..

GoogleSignin.signIn()
  .then((user) => {
    console.log('get user');  // I can get user here

    // This firebase function can't be called (no reaction)
    fire.database().ref('Users').child(user.id).once('value', snapshot => {

      console.log('inside function');  // can't log it

      if(!snapshot.val()) {
        console.log('new');  // can't log it
        fire.database().ref('Users').child(user.id).child('User_Data').set({
          username: user.name,
          email: user.email,
          avatar: user.photo
        });
      }

      else {
        console.log('old');  // can't log it
        fire.database().ref('Users').child(user.id).child('User_Data').update({
          username: user.name,
          email: user.email,
          avatar: user.photo
        });
      }
    });
  })
  .catch((err) => {
    console.log('WRONG SIGNIN', err);
  })
  .done();

我只能获取'用户'数据。我的Firebase身份验证屏幕中未创建新的Google电子邮件。此外,我的数据库中没有创建新的用户数据。

有没有人有相同的问题或解决方案?感谢您的帮助或想法!

1 个答案:

答案 0 :(得分:0)

我没有使用React,所以这可能没什么帮助,但你是否尝试将代码重新分解为这样的代码;

function googleSignIn() {
  GoogleSignin.signIn()
    .then(validateSignIn) // Might need to be `this.validateSignIn`
    .catch((err) => {
      console.log('WRONG SIGNIN', err);
    })
    .done();
}

function validateSignIn(user) {
  console.log('get user');  // I can get user here

  // This firebase function can't be called (no reaction)
  fire.database().ref('Users').child(user.id).once('value', snapshot => {

    console.log('inside function');  // can't log it

    if(!snapshot.val()) {
      console.log('new');  // can't log it
      fire.database().ref('Users').child(user.id).child('User_Data').set({
        username: user.name,
        email: user.email,
        avatar: user.photo
      });
    }

    else {
      console.log('old');  // can't log it
      fire.database().ref('Users').child(user.id).child('User_Data').update({
        username: user.name,
        email: user.email,
        avatar: user.photo
      });
    }
}

这样validateSignIn函数就在它自己的函数中,而不是由你的对象封装。