skip to Main Content

i have a react natve app it has a signup whith google button when i click on signin i am getting data in console.log i want to save the data in firebase i sont know how to do it

  const googleLogin = async () => {
    try {
      await GoogleSignin.hasPlayServices();
      const userInfo = await GoogleSignin.signIn();
      console.log(userInfo);// i am getting user data here

     
    } catch (error) {
      if (error.code === statusCodes.SIGN_IN_CANCELLED) {
        // user cancelled the login flow
      } else if (error.code === statusCodes.IN_PROGRESS) {
        // operation (e.g. sign in) is in progress already
      } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
        // play services not available or outdated
      } else {
        // some other error happened
      }
    }
  };

2

Answers


  1. You can refer to this LINK for google social auth, this is what you’re looking for to save the auth data to firebase:

    import auth from '@react-native-firebase/auth';
    import { GoogleSignin } from '@react-native-google-signin/google-signin';
    
    async function onGoogleButtonPress() {
      // Check if your device supports Google Play
      await GoogleSignin.hasPlayServices({ showPlayServicesUpdateDialog: true });
      // Get the users ID token
      const { idToken } = await GoogleSignin.signIn();
    
      // Create a Google credential with the token
      const googleCredential = auth.GoogleAuthProvider.credential(idToken);
    
      // Sign-in the user with the credential
      return auth().signInWithCredential(googleCredential);
    }
    
    Login or Signup to reply.
  2. This can helpful. Just make sure you have integrated all libraries for firebase authentication.

    import {
      GoogleSignin,
      statusCodes,
    } from '@react-native-google-signin/google-signin';
    import auth, {FirebaseAuthTypes} from '@react-native-firebase/auth';
    
    // This function will be call on tapping sign in with google button
    const signInWithGoogle = async () => {
      try {
        // This will check whether there is Google play service or not
        await GoogleSignin.hasPlayServices();
    
    //This will give you userInformation
        const userInfo = await GoogleSignin.signIn();
    
        // This will create new credential which can help to signIn in firebase
    
        const credential = auth.GoogleAuthProvider.credential(userInfo.idToken);
      
    //Here we are trying to return promise so when we call function we can have promise object
        
    return new Promise((resolve, reject) => {
          auth()
            .signInWithCredential(credential)
            .then(response => {
              console.log('response in', response);
              resolve(response);
            })
            .catch(error => {
              console.log('error in', error);
              reject(error);
            });
        });
      } catch (error) {
        if (error.code === statusCodes.SIGN_IN_CANCELLED) {
          // user cancelled the login flow
        } else if (error.code === statusCodes.IN_PROGRESS) {
          // operation (e.g. sign in) is in progress already
          alert(JSON.stringify(error));
        } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
          // play services not available or outdated
          alert(JSON.stringify(error));
        } else {
          alert(error);
        }
      }
    };
    

    Now when you call this function on google button on press it will give you promise object and you can do it like below.

    onPress={() => {
    
              SignInMethods.signInWithGoogle()
                .then(response => {
                  console.log('user information from firebase authentication', response.user);
    
                })
                .catch(error => {
    
                  console.log('error in google sign in :', error);
    
                });
    }}
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search