簡體   English   中英

無法在GoogleSignin登錄功能內調用Firebase數據庫功能

[英]Can't call firebase database function inside GoogleSignin signIn function

我正在使用react-native-google-signin來實現google登錄功能。 設置完所有配置步驟后,我便可以從GoogleSignin.signIn()。then((user)=> {...}中獲取“用戶”。

現在,我要檢查此用戶是否已經使用了“此” 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電子郵件。 另外,在我的數據庫中沒有創建新的用戶數據。

是否有人有相同的問題或解決方案? 感謝您的幫助或想法!

我不使用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函數就在其自己的函數中,而不是由您的thenable對象封裝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM