我正在使用Firebase Authentication service
开发一个Flutter
应用程序。
使用以下Flutter
插件:
-
Firebase_auth
-
Google_sign_in
-
Facebook_login
登录流程为:
- 使用Facebook,Google或Email&Password登录
- 如果帐户已创建,请登录
- 如果没有,则抛出错误
如果日志记录方法是电子邮件和密码,则这是可能的。Firebase_auth
插件中,电子邮件和密码方案有两种单独的方法:createUserWithEmailAndPassword
和signInWithEmailAndPassword
。使用不存在的帐户调用登录方法时,它将引发wrong id/password
错误。
但是,对于Facebook/Google登录方法,该插件仅提供signInWithFacebook
和signInWithGoogle
以及它们的工作方式是,用户第一次使用Facebook/Google帐户登录时,Firebase
将自动创建一个帐户并返回新创建的帐户。(没有单独的sign up
和sign in
过程(
我还阅读了适用于Android Google Signin的Firebase文档
用户首次登录后,将创建一个新用户帐户,并将其链接到用户登录时使用的凭据(即用户名和密码、电话号码或身份验证提供程序信息(。此新帐号将存储为 Firebase 项目的一部分,可用于识别项目中每个应用中的用户,无论用户如何登录。
所以,我的问题是:如果用户使用尚未用于在Firebase
上注册我的应用程序的 Fb/G 帐户登录,我如何使Firebase authentication
抛出错误而不是自动创建新帐户?
来自Firebase团队的Malcolm在这里!好问题。
鉴于开源 Flutter 插件中当前存在的功能,您可能可以使用方法 #fetchProvidersForEmail(( 获得您想要的结果。以下是您将为联合 IDP 遵循的逻辑步骤:
- 使用 IDP 进行正常登录并获取令牌。
- 分析返回用户电子邮件令牌的分析(通常使用 JWT 分析库(。
- 使用提取的电子邮件调用 #fetchProvidersForEmail((。
- 如果返回电子邮件的提供商为空,则它是一个新帐户。否则,它是现有帐户。
或者,您可以更新 Flutter 插件以返回更多 AuthResult,其中包括用户是否是新用户。如果用户是新用户,那么您只需调用FirebaseAuth#getCurrentUser((#delete((并抛出您想要的任何错误。(您还必须将其添加到插件中(。