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

时间:2019-04-16 20:31:51

标签: firebase dart flutter firebase-authentication

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

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

因此,我遵循doc并尝试配置帐户关联

但是我不知道该怎么办。

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

例如,原始代码具有:

Google:

  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);
  }

Facebook:

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

每次在_signInWithFacebook()_signInWithGoogle()中通话都是正确的:

user = await auth.linkWithCredential(credential);

例如:

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

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

  }

如何正确实施?

谢谢!

2 个答案:

答案 0 :(得分:0)

当用户输入其电子邮件地址登录时,您将要使用fetchProvidersForEmail()来确定该电子邮件地址是否已知。

如果用户已经注册了另一个提供商,则是询问他们是否要合并这些帐户,然后调用帐户链接API的好时机。

答案 1 :(得分:0)

@FlutterFirebase要将两个提供商链接到同一封电子邮件,请按照以下说明进行操作,

点击Firebase控制台->身份验证->登录方法,如下所示enter image description here

现在在此signIn方法下方,有一个名为“每个电子邮件地址多个帐户”的选项,单击更改并启用“允许使用相同的电子邮件地址创建多个帐户”->保存。你们都准备好了。现在,您可以使用来自不同提供商的同一电子邮件登录

enter image description here

就是这样,但是,如果您想从两家提供商那里获取电子邮件,则需要添加其他代码。如果您想同时为两个提供商使用电子邮件,则可以发表评论。