Firebase与Apple的身份验证不提供用户电子邮件

qzlgjiam  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(172)

我有一个Flutter应用程序,其身份验证流程使用Firebase Authentication,我想在Cloud Firestore中创建一个条目,其中emailUserCredential对象的user字段中检索,该对象由firebase_auth库在登录时返回。
这对于Google和Email+passowrd身份验证提供商来说非常有效,但是对于Apple来说,email是。我期待着收到一封私人电子邮件的类型“@ privaterelay.appleid.com“,但我没有。如何在注册时获取Apple用户的电子邮件?
此外,在Firebase控制台的Authentication视图中,几乎所有用户都使用空的“identifier”(电子邮件应该在的位置)注册,但有些用户还使用“@ privaterelay.appleid.com“电子邮件注册。为什么会这样?

slmsl1lt

slmsl1lt1#

这就是苹果的登录方式。用户可以选择不共享他们的电子邮件。

uqdfh47h

uqdfh47h2#

您在Firebase身份验证和Apple登录中观察到的行为是预期的,这是由于Apple处理用户隐私和数据保护的方式。

邮件隐私保护:

Apple的Sign In with Apple功能通过为用户提供在登录第三方应用程序时隐藏其电子邮件地址的选项,优先考虑用户隐私。当用户选择隐藏其电子邮件地址时,Apple会生成一个唯一的随机电子邮件地址(例如,“@ privaterelay.appleid.com“),将电子邮件转发到用户的真实的电子邮件地址。此功能称为“电子邮件隐私保护”。
当用户登录Apple并选择隐藏其电子邮件地址时,Firebase身份验证确实会在UserCredential对象中返回一个随机的电子邮件地址,如“@ privaterelay.appleid.com“,而不是用户的实际电子邮件地址。

Firebase认证标识:

您在Firebase身份验证的用户列表中看到的“identifier”字段是Firebase存储用户的电子邮件或其他标识符的地方。但是,当用户登录Apple并隐藏其电子邮件地址时,Firebase确实会将“@ privaterelay.appleid.com”地址存储为标识符,因为这是Apple提供的信息。
某些用户在Firebase身份验证中使用空标识符注册的原因可能有多种,包括身份验证过程中您的应用和Firebase之间的令牌交换问题或用户创建过程中的错误。
要解决这些难题并确保您拥有用户的实际电子邮件地址(如果可用),您可以执行以下步骤:

检查Apple identityToken:

当用户登录Apple时,UserCredential对象包含一个identityToken字段。您可以解码此令牌以提取用户的真实的电子邮件地址(如果可用)。请注意,只有当用户在登录过程中没有选择隐藏电子邮件地址时,才会包含该电子邮件地址。你可以使用像jwt_decode这样的库来解码令牌并提取电子邮件。

请求邮件范围:

在您的应用中集成Sign In with Apple时,请确保在启动登录过程时请求必要的电子邮件相关作用域。这可能会增加获得用户实际电子邮件地址的机会。

优雅地处理丢失的电子邮件:

为用户的电子邮件不可用的情况做好准备(例如,他们选择隐藏它)。在这种情况下,您可以通知用户,由于隐私设置,他们的电子邮件无法访问。
请记住,您的应用的用户体验应尊重用户的隐私选择,并始终按照相关隐私法律法规谨慎处理敏感的用户数据。

相关问题