我已经实现了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
}
如何正确实施?
谢谢!
答案 0 :(得分:0)
当用户输入其电子邮件地址登录时,您将要使用fetchProvidersForEmail()
来确定该电子邮件地址是否已知。
如果用户已经注册了另一个提供商,则是询问他们是否要合并这些帐户,然后调用帐户链接API的好时机。
答案 1 :(得分:0)