将多个Auth提供程序链接到一个帐户

问题描述 投票:1回答:2

我已经实施了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);
  }

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

  }

我怎么能正确实施?

谢谢!

firebase dart flutter firebase-authentication
2个回答
1
投票

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

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


0
投票

@FlutterFirebase为了将两个提供商与相同的电子邮件链接,请按以下方式进行操作,

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

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

enter image description here

就是这样但是如果你想从两个提供商那里获得电子邮件,那么你需要添加额外的代码。如果要为两个提供商使用电子邮件,您可以发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.