流程步骤:
- 登录Twitter
mail@gmail.com
(成功) - 登录Google
mail@gmail.com
(成功重写Google的提供程序) - 再次登录Twitter
mail@gmail.com
(失败,帐户已存在于不同的Provider )
我对第二步感到很困惑..因为,Firebase不会阻止登录到GoogleProvider 并重写Provider
Future<Either<Failure, Unit>> signInWithTwitter() async {
try {
if (kIsWeb) {
await _firebaseAuth.signInWithPopup(_twitterAuthProvider);
} else {
await _firebaseAuth.signInWithProvider(_twitterAuthProvider);
}
return right(unit);
} on FirebaseAuthException catch (e) {
return left(
Failure.authFailure(
message: e.toString(),
),
);
}
}
Future<Either<Failure, Unit>> signInWithGoogle() async {
try {
final googleUser = await _googleSignIn.signIn();
if (googleUser == null) {
return left(const Failure.authFailure());
}
final googleAuthentication = await googleUser.authentication;
final authCredential = GoogleAuthProvider.credential(
idToken: googleAuthentication.idToken,
accessToken: googleAuthentication.accessToken,
);
await _firebaseAuth.signInWithCredential(authCredential);
return right(unit);
} on FirebaseAuthException catch (e) {
return left(
Failure.authFailure(
message: e.toString(),
),
);
}
}
那么,如果已经存在其他Provider (如Twitter、GitHub、Facebook等)的帐户,如何阻止用户登录?