Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Firebase身份验证服务时,如何在没有现有帐户的情况下通过Facebook/Google登录时抛出错误_Firebase_Firebase Authentication_Flutter - Fatal编程技术网

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

使用Firebase身份验证服务时,如何在没有现有帐户的情况下通过Facebook/Google登录时抛出错误,firebase,firebase-authentication,flutter,Firebase,Firebase Authentication,Flutter,我正在使用Firebase身份验证服务开发一个flatter应用程序 使用了以下flatter插件: 登录流程为: 使用Facebook、Google或电子邮件和密码登录 如果已创建帐户,请登录 如果不是,则抛出错误 如果日志记录方法是电子邮件和密码,则这是可能的。在Firebase\u auth插件中,电子邮件和密码场景有两种不同的方法:createUserWithEmailAndPassword和withemailandpassword登录。当使用不存在的帐户调用登录方法时,它将抛出错

我正在使用
Firebase身份验证服务
开发一个
flatter
应用程序

使用了以下
flatter
插件:

  • 登录流程为:

  • 使用Facebook、Google或电子邮件和密码登录
  • 如果已创建帐户,请登录
  • 如果不是,则抛出错误
  • 如果日志记录方法是电子邮件和密码,则这是可能的。在
    Firebase\u auth
    插件中,电子邮件和密码场景有两种不同的方法:
    createUserWithEmailAndPassword
    withemailandpassword登录。当使用不存在的帐户调用登录方法时,它将抛出错误的id/密码

    然而,对于Facebook/Google登录方法,该插件只提供
    signiWithFacebook
    signiWithGoogle
    他们的工作方式是,用户第一次使用facebook/google帐户登录,
    Firebase
    将自动创建一个帐户并返回新创建的帐户。(没有单独的
    注册
    登录
    过程)

    我也在报纸上读到

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


    因此,我的问题是:如果用户使用Fb/G帐户登录,但该帐户尚未用于在
    Firebase
    上注册我的应用程序,我如何使
    Firebase身份验证
    抛出错误,而不是自动创建新帐户?

    Firebase团队的Malcolm!好问题

    考虑到中当前存在的功能,您可以使用#fetchProvidersForEmail()方法获得所需的结果。以下是您将为联合IDP遵循的逻辑步骤:

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

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

    谢谢!我认为
    Dart插件
    已经实现了SDK的所有方法。我认为你的回答很清楚,我可以自己实施具体的解决方案。