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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将多个Auth提供程序链接到一个帐户相关的知识,希望对你有一定的参考价值。

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

  }

我怎么能正确实施?

谢谢!

答案

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

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

另一答案

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

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

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

enter image description here

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

以上是关于将多个Auth提供程序链接到一个帐户的主要内容,如果未能解决你的问题,请参考以下文章

如何使用多个 NavHost 片段创建深层链接

我可以使用 Firebase Auth 或 FaceBook 帐户工具包而不是 SMSprovider 吗?

通过多个 OAuth2 提供程序登录时如何减少代码重复?

Google Actions 帐户关联流程

提供到 Auth.Net 管理员的直接链接,特别是退款

django-allauth:将多个社交帐户链接到单个用户