title: missing emails in firebase auth for 20% of facebook credentials
body: <p>I allow users to login with facebook on my app, backed by firebase authentication.</p>
  <p>In around 20% of the facebook logins, I don't receive the user's email. I need the email address in my app, and can't figure out why I don't receive it.</p>
  <p>Since I get the email address 80% of the time, I assume I have the right permissions setup to retrieve it.</p>
  <p>I also enforced &quot;One account per email address&quot; in firebase-auth, so it seems to be a different issue than that raised in <a href="https://stackoverflow.com/questions/51314454/firebase-auth-missing-email-address">Firebase Auth missing email address</a>.</p>
  <p>Relevant extracts of my code:</p>
  <pre class="lang-ts prettyprint-override"><code>export const FacebookSignUp: React.FC&lt;SocialAuthProps &amp; { title?: string }&gt; = ({ onError, onSetWaiting, title }) =&gt; {
    async function onFacebookButtonPress() {
      onSetWaiting(true);
      const { email, first_name, accessToken } = await getFacebookUserData();
      const couldLogin = await tryLoginWithFacebook(email, accessToken);
      if (!couldLogin) {
        // Create a Firebase credential with the AccessToken
        const facebookCredential = FacebookAuthProvider.credential(accessToken);
        const userCredential = await firebaseAuth.signInWithCredential(facebookCredential);
        if (userCredential.user === null) {
          throw new Error(&quot;Null user&quot;);
        }
        const signupUser: SignupUserData = {
          userId: userCredential.user.uid,
          email,
          pseudo: first_name || undefined
        };
        await createSignupUser(signupUser).then(() =&gt; {
          onSetWaiting(false);
        });
      }
    }
  
    return (
      &lt;SocialButton
        iconName=&quot;facebookIcon&quot;
        title={title || &quot;S'inscrire avec Facebook&quot;}
        onPress={() =&gt;
          onFacebookButtonPress().catch((err) =&gt; {
            onSetWaiting(false);
            if (err instanceof SocialAuthError) {
              onError(err);
            } else if (err instanceof Error) {
              const { message, name, stack } = err;
              serverError(&quot;Unexpected signup error&quot;, { message, name, stack });
            }
          })
        }
      /&gt;
    );
  };
  </code></pre>
  <pre class="lang-ts prettyprint-override"><code>
  import { LoginManager, AccessToken, GraphRequest, GraphRequestManager } from &quot;react-native-fbsdk&quot;;
  
  export async function getFacebookUserData(): Promise&lt;FacebookInfo&gt; {
    LoginManager.logOut();
    const result = await LoginManager.logInWithPermissions([&quot;public_profile&quot;, &quot;email&quot;]);
  
    if (result.isCancelled) {
      throw &quot;User cancelled the login process&quot;;
    }
  
    // Once signed in, get the users AccesToken
    const { accessToken } = (await AccessToken.getCurrentAccessToken()) || {};
    if (!accessToken) {
      throw &quot;Something went wrong obtaining access token&quot;;
    }
  
    return new Promise((resolve, reject) =&gt; {
      let req = new GraphRequest(
        &quot;/me&quot;,
        {
          httpMethod: &quot;GET&quot;,
          version: &quot;v2.5&quot;,
          parameters: {
            fields: {
              string: &quot;email,first_name&quot;
            }
          }
        },
        (err, res) =&gt; {
          if (err || res === undefined) {
            reject(err);
          } else {
            const { first_name, email } = res as { first_name: string; email: string };
            resolve({ first_name, email, accessToken });
          }
        }
      );
      new GraphRequestManager().addRequest(req).start();
    });
  }
  </code></pre>