将多个身份验证提供程序链接到一个帐户

Flu*_*ase 6 dart firebase firebase-authentication flutter

我已经实现了 Facebook 和 Google 登录。

但是 FireBase 文档说,如果同一用户首先注册 Facebook,然后尝试使用 Google(使用相同的电子邮件)登录,这将导致错误。

所以我按照 doc 并尝试配置帐户链接

但我不知道该怎么做。

每次用户登录时我都应该尝试链接帐户吗?问题是我不知道用户是否已经通过其他身份验证提供商登录。

例如,原代码有:

谷歌:

  void _signInWithGoogle() async {
    final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    final GoogleSignInAuthentication googleAuth =
        await googleUser.authentication;
    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    final FirebaseUser user = await _auth.signInWithCredential(credential);
  }
Run Code Online (Sandbox Code Playgroud)

Facebook:

  void _signInWithFacebook() async {
    final AuthCredential credential = FacebookAuthProvider.getCredential(
      accessToken: _tokenController.text,
    );
    final FirebaseUser user = await _auth.signInWithCredential(credential);
  }
Run Code Online (Sandbox Code Playgroud)

每次在_signInWithFacebook()and 中调用是正确的_signInWithGoogle()

user = await auth.linkWithCredential(credential);
Run Code Online (Sandbox Code Playgroud)

例如:

  void _signInWithFacebook() async {
    final AuthCredential credential = FacebookAuthProvider.getCredential(
      accessToken: _tokenController.text,
    );
    final FirebaseUser user = await _auth.signInWithCredential(credential);

user = await auth.linkWithCredential(credential); //new

  }
Run Code Online (Sandbox Code Playgroud)

我如何正确实施?

谢谢!

Fra*_*len 2

当用户输入他们的电子邮件地址进行登录时,您需要用来fetchSignInMethodsForEmail()查明该电子邮件地址是否已知。

如果用户已经与其他提供商注册,那么这是询问他们是否要合并这些帐户的好时机,然后调用帐户链接 API。