从Firebase Auth Console获取标识符字段

时间:2018-02-15 19:11:19

标签: firebase firebase-authentication facebook-login

我尝试使用Facebook Firebase提供商从当前已验证的用户那里收到电子邮件。该电子邮件列在Project的Firebase身份验证控制台中的标识符字段下: enter image description here

但是,当我调用firebase.auth().currentUser加载用户信息时,电子邮件字段为null。有关如何从Firebase获取标识符(我在哪里看到电子邮件地址)的任何想法?这甚至可能吗?

以下是我使用的代码:

    componentDidMount() {

      let user = firebase.auth().currentUser;
      let name, email, photoUrl, uid, emailVerified;

      if (user !== null) {
       name = user.displayName;
       email = user.email;
       photoUrl = user.photoURL;
       emailVerified = user.emailVerified;
       uid = user.uid;

       console.log(name, email, photoUrl, emailVerified, uid);
      }

    }

注意:在Firebase中禁止使用相同的电子邮件地址创建多个帐户。此外,Facebook API权限设置为['public_profile', 'email']

2 个答案:

答案 0 :(得分:0)

经过一些测试和调试后,我发现如果您使用的是常规Firebase电子邮件/密码登录方法,则会填充email字段。但是,如果您使用其他登录提供商方法(如Facebook),则电子邮件字段将显示为null(不确定原因)。

user对象的进一步检查显示providerData属性。 它是一个包含所有提供者信息(包括电子邮件地址)的数组:

enter image description here

所以,我更新了我的代码以适应这个:

    componentDidMount() {

      let user = firebase.auth().currentUser;

      let name, email, photoUrl, uid, emailVerified;

      if (user) {
        name = user.displayName; 
        email = user.email;
        photoUrl = user.photoURL; 
        emailVerified = user.emailVerified;
        uid = user.uid;

        if (!email) {
          email = user.providerData[0].email;
        }

        console.log(name, email, photoUrl, emailVerified, uid);
      }

    }

答案 1 :(得分:0)

在我的情况下,getEmail()方法始终返回三种登录可能性的数据(如果用户授权我的应用程序显示/使用电子邮件):使用电子邮件登录,使用Google登录,使用Facebook登录

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Log.v(TAG,"user.getEmail():"+user.getEmail());

if (user.getEmail() == null){
    // User did not authorize the app to show/user email
}
else {
   Log.v(TAG,"user.getEmail():"+user.getEmail());   
}