首页 文章

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

提问于
浏览
1

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

使用以下 Flutter 插件:

登录流程是:

  • 使用Facebook,Google或电子邮件和密码登录

  • 如果已创建帐户,请登录

  • 如果不是,则抛出错误

如果记录方法是电子邮件和密码,则可以执行此操作 . 在 Firebase_auth 插件中,电子邮件和密码方案有两种不同的方法: createUserWithEmailAndPasswordsignInWithEmailAndPassword . 当使用不存在的帐户调用登录方法时,它将抛出 wrong id/password 错误 .

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

我也读过Firebase doc for Android Google Sign in

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

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

1 回答

  • 1

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

    鉴于open source Flutter plugins中当前存在的功能,您可以使用方法#fetchProvidersForEmail()获得所需的结果 . 以下是您将为联邦国内流离失所者遵循的逻辑步骤:

    • 使用IDP正常登录并获取令牌 .

    • 解析返回用户电子邮件的令牌(通常使用JWT解析库) .

    • 使用提取的电子邮件调用#fetchProvidersForEmail() .

    • 如果为电子邮件返回的提供商为空,则's a new account. Otherwise, it'是现有帐户 .

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

相关问题