vivek kn
vivek kn

Reputation: 265

save Authentication data to firebase React native

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

Upvotes: 0

Views: 446

Answers (2)

Rock Patekar
Rock Patekar

Reputation: 23

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

            });
}}

Upvotes: 2

Mostafa Elkaramany
Mostafa Elkaramany

Reputation: 685

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

Upvotes: 2

Related Questions