dart Firebase身份验证:如何确定使用google或apple登录时firebase帐户是否已经存在?

3lxsmp7m  于 2023-05-04  发布在  Go
关注(0)|答案(1)|浏览(170)

在我的应用程序中,我有一个登录页面和一个带有入职流程的注册页面。如果用户想登录Google或Apple,我想先检查是否有现有的Firebase帐户。否则,用户需要先注册。
现在我使用fetchSignInMethodsForEmail方法来检查Firebase帐户是否存在。对于Apple登录,它看起来像这样:

Future<String> appleSignInOrSignUp(bool isSignIn) async {
  final _firebaseAuth = FirebaseAuth.instance;

  try {
    final appleUser = await SignInWithApple.getAppleIDCredential(
      scopes: [
        AppleIDAuthorizationScopes.email,
      ],
    );

    final email = appleUser.email;
    if (isSignIn && email != null) {
      final list = await _firebaseAuth.fetchSignInMethodsForEmail(email);
      // if there is no firebase account yet, user needs to sign up first
      if (list.isEmpty) return 'Not registered';
    }

    final credential = AppleAuthProvider.credential(
      appleUser.authorizationCode,
    );

    await _firebaseAuth.signInWithCredential(credential);
    return 'Success';
  } catch (e) {
    return '$e';
  }
}

我对这个解决方案有两个问题:
1.如果用户更改了他的Google或Apple电子邮件,会发生什么?fetchSignInMethodsForEmail方法是否仍然有效?
1.在苹果的情况下,电子邮件仅在第一次授权时提供。如果没有提供电子邮件,如何检查是否有此Apple用户的帐户?
是否有更好的解决方案来确定用户是否拥有Firebase帐户?

u91tlkcl

u91tlkcl1#

1.如果用户更改了他的Google或Apple电子邮件,会发生什么?fetchSignInMethodsForEmail方法是否仍然有效?
否,除非您使用User#updateEmail(String newEmail)函数用新电子邮件更新User对象。更新后,FirebaseAuth#fetchSignInMethodsForEmail(String email)将返回所需的结果。
1.在苹果的情况下,电子邮件仅在第一次授权时提供。如果没有提供电子邮件,如何检查是否有此Apple用户的帐户?
fetchSignInMethodsForEmail函数需要一个参数。如果没有电子邮件地址,它将无法工作。
是否有更好的解决方案来确定用户是否拥有Firebase帐户?
据我所知没有

相关问题