我已经实施了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的好时机。