dart 将Firebase匿名用户转换为具有电子邮件和密码的用户- Flutter

hlswsv35  于 2023-07-31  发布在  Flutter
关注(0)|答案(1)|浏览(119)

我无法将匿名Firebase用户转换为具有电子邮件和密码的注册用户。
我的代码看起来像这样:

Future linkAnonymousAccount({
    required String email,
    required String password,
  }) async {
    try {
      await _auth.currentUser!.linkWithCredential(
        auth.EmailAuthProvider.credential(email: email, password: password),
      );
      // await refreshUser();
    } on auth.FirebaseAuthException catch (e) {
      throw LinkAnonymousAccountException(e.code);
    }
  }

字符串
EmailAuthProvider.credential似乎创建了一个新用户(带有新的uuid和所有内容),而不是转换当前的匿名用户。
创建匿名用户后:

Future signInAnonymously() async {
    try {
      await _auth.signInAnonymously();
    } on auth.FirebaseAuthException catch (e) {
      throw SignInException(e.code);
    }
  }


然后调用上面的linkAnonymousAccount-方法,我在firebase控制台中得到以下结果:
x1c 0d1x的数据
但是这样我就丢失了所有的用户数据,比如 displayNamephotoUrl,还有我数据库中的所有数据(由于不同的uuid)。
我无法找到解决方案,也无法解释为什么会发生这种情况。
我发现了一个video,但情况并非如此,匿名用户实际上被转换了。但是我使用了和视频中的人相同的代码,得到了不同的结果。
我错过了什么吗?有人能解释一下吗?

bgibtngc

bgibtngc1#

是的,这是可能的-有一个内置的方法
例如,用户匿名登录,然后开始Apple登录。

final appleProvider = AppleAuthProvider()
    ..addScope('email')
    ..addScope('fullName');

  final UserCredential user;
  if (FirebaseAuth.instance.currentUser != null) {
    user = await FirebaseAuth.instance.currentUser!.linkWithProvider(appleProvider);
  } else {
    user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
  }

字符串
因此,您将拥有一个使用Apple登录的用户,其ID与Anonymous用户相同。

相关问题