使用Firebase身份验证服务时,如何在没有现有帐户的情况下通过Facebook / Google登录时抛出错误



我正在使用Firebase Authentication service开发一个Flutter应用程序。

使用以下Flutter插件:

  1. Firebase_auth

  2. Google_sign_in

  3. Facebook_login

登录流程为:

  1. 使用Facebook,Google或Email&Password登录
  2. 如果帐户已创建,请登录
  3. 如果没有,则抛出错误

如果日志记录方法是电子邮件和密码,则这是可能的。Firebase_auth插件中,电子邮件和密码方案有两种单独的方法:createUserWithEmailAndPasswordsignInWithEmailAndPassword。使用不存在的帐户调用登录方法时,它将引发wrong id/password错误。

但是,对于Facebook/Google登录方法,该插件仅提供signInWithFacebooksignInWithGoogle以及它们的工作方式是,用户第一次使用Facebook/Google帐户登录时,Firebase将自动创建一个帐户并返回新创建的帐户。(没有单独的sign upsign in过程(

我还阅读了适用于Android Google Signin的Firebase文档

用户

首次登录后,将创建一个新用户帐户,并将其链接到用户登录时使用的凭据(即用户名和密码、电话号码或身份验证提供程序信息(。此新帐号将存储为 Firebase 项目的一部分,可用于识别项目中每个应用中的用户,无论用户如何登录。

所以,我的问题是:如果用户使用尚未用于在Firebase上注册我的应用程序的 Fb/G 帐户登录,我如何使Firebase authentication抛出错误而不是自动创建新帐户?

来自Firebase团队的Malcolm在这里!好问题。

鉴于开源 Flutter 插件中当前存在的功能,您可能可以使用方法 #fetchProvidersForEmail(( 获得您想要的结果。以下是您将为联合 IDP 遵循的逻辑步骤:

  1. 使用 IDP 进行正常登录并获取令牌。
  2. 分析返回用户电子邮件令牌的分析(通常使用 JWT 分析库(。
  3. 使用提取的电子邮件调用 #fetchProvidersForEmail((。
  4. 如果返回电子邮件的提供商为空,则它是一个新帐户。否则,它是现有帐户。

或者,您可以更新 Flutter 插件以返回更多 AuthResult,其中包括用户是否是新用户。如果用户新用户,那么您只需调用FirebaseAuth#getCurrentUser((#delete((并抛出您想要的任何错误。(您还必须将其添加到插件中(。

相关内容

最新更新