无法在Android / iOS上从FirebaseAuthentication检索电子邮件

时间:2019-02-21 07:44:44

标签: android firebase firebase-authentication

我正在使用Google / Facebook社交登录名在我的应用程序中使用FirebaseAuth,并且我们允许用户在首次登录后更改他的电子邮件,因为我们拥有自己的后端用户管理部门,并且会在注册表格中预先填写此电子邮件。

似乎我突然无法从FirebaseUser.getEmail()方法中检索用户的电子邮件地址。当我尝试使用Facebook / Google登录SDK检索电子邮件时,我可以对其进行检索,因此这不是隐私问题。我的电子邮件已经过验证,因此这也不是问题。

在登录FirebaseAuth后调用AuthResult.getAdditionalUserInfo().getProfile时,我可以看到email在地图中。

我已经在此处阅读了一些问题,以便用户无法在Firebase控制台中看到电子邮件,但可以看到所有内容。 Firebase auth SDK的版本为16.1.0。此行为在我们的iOS应用程序中也可见,因此与Android无关,但仍无法弄清为什么会发生这种情况。 docs说它将在登录时预先填充。

我弄错了吗?还是获取此电子邮件的正确方法是什么,以便我可以用它来预先填充表单?

2 个答案:

答案 0 :(得分:1)

使用“每个电子邮件有多个帐户”设置时,非电子邮件(电子邮件/密码或电子邮件链接)帐户的顶级电子邮件user.getEmail()为空。您可以从user.getProviderData().get(0).getEmail()列表中获取电子邮件,但前提是提供者存储在索引0中。

这是因为顶级电子邮件是唯一的,并且没有2个帐户可以共享。结果,对于使用该电子邮件创建的任何其他OAuth帐户(如Facebook,Google等),顶级电子邮件为空。

答案 1 :(得分:0)

@Billda

但是我们可以从task.isSuccessful()方法中获取电子邮件。

只需在firebase的成功任务中使用此代码段即可:

Map profile = task.getResult().getAdditionalUserInfo().getProfile();

Object email = profile.get("email");

  

尽管我们使用相同的电子邮件表单,但仍从使用中获取电子邮件   Facebook和Google登录帐户。

通过这种方式,您可以获得特定用户的电子邮件

谢谢。您能否清楚地将问题发布到遇到的地方?

因为有很多可能性我们可以将电子邮件设为空。