2017-08-16 3 views
0

nennen Ich verwende reagieren-native-Google-signin Google-Login-Funktion zu erreichen. Nachdem ich alle Konfigurationsschritte eingerichtet habe, kann ich "user" von GoogleSignin.signIn() holen. Dann ((user) => {...}.Kann nicht Feuerbasis Datenbankfunktion innerhalb GoogleSignin Signin Funktion

Jetzt möchte ich überprüfen, ob dieser Benutzer hat Dieses "Google" -Konto wurde bereits verwendet. Wenn ja, muss ich die Benutzerdaten nicht in der Firebase-Datenbank erstellen. Wenn nicht (zum ersten Mal), muss ich die Benutzerdaten in der Google-Anmeldungsfunktion erstellen mein Code.

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(); 

kann ich nur die Daten ‚Benutzer‘. keine neue Google E-Mail in meinem Firebase Authentifizierungsbildschirm erstellt wird. auch keine neuen Nutzdaten in meiner Datenbank erstellt wird.

Does Anyo ne das gleiche Problem oder die Lösung? Danke für jede Hilfe oder Idee!

Antwort

0

Ich reagiere nicht so verwenden, könnte dies nicht helfen, aber haben Sie versucht, Ihren Code, so etwas zu re-Faktor;

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 
     }); 
    } 
} 

Auf diese Weise die validateSignIn Funktion in einem eigenen Funktion ist und nicht von Ihrem thenable Objekt gekapselt.

+0

Hallo sketchthat, vielen Dank für die Hilfe! Aber es funktioniert nicht :( – MelodiiLy

+0

Haben Sie versucht, ruft beide mit 'this' und ohne? (' This.validateSignIn' und 'validateSignIn') – sketchthat

+0

Hallo sketchthat, ich dieses Problem gelöst. Das Problem ist, ich nicht GoogleAuthProvider nicht genutzt in der API. Jetzt kann ich mich mit Google anmelden. Vielen Dank! – MelodiiLy

Verwandte Themen