作者:黄雅萱介芳 | 来源:互联网 | 2023-05-18 10:45
篇首语:本文由编程笔记#小编为大家整理,主要介绍了将多个Auth提供程序链接到一个帐户相关的知识,希望对你有一定的参考价值。 我已经实施了Facebook和Google登录。但FireBase文档称,
篇首语:本文由编程笔记#小编为大家整理,主要介绍了将多个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方法,如下所示
现在,在此signIn方法下方,有一个名为“每个电子邮件地址的多个帐户”的选项,单击更改并启用“允许使用相同的电子邮件地址创建多个帐户” - >保存。你们都准备好了。现在,您可以使用不同提供商的相同电子邮件登录
就是这样但是如果你想从两个提供商那里获得电子邮件,那么你需要添加额外的代码。如果要为两个提供商使用电子邮件,您可以发表评论。