在我的应用程序中,我有一个登录页面和一个带有入职流程的注册页面。如果用户想登录Google或Apple,我想先检查是否有现有的Firebase帐户。否则,用户需要先注册。
现在我使用fetchSignInMethodsForEmail
方法来检查Firebase帐户是否存在。对于Apple登录,它看起来像这样:
Future<String> appleSignInOrSignUp(bool isSignIn) async {
final _firebaseAuth = FirebaseAuth.instance;
try {
final appleUser = await SignInWithApple.getAppleIDCredential(
scopes: [
AppleIDAuthorizationScopes.email,
],
);
final email = appleUser.email;
if (isSignIn && email != null) {
final list = await _firebaseAuth.fetchSignInMethodsForEmail(email);
// if there is no firebase account yet, user needs to sign up first
if (list.isEmpty) return 'Not registered';
}
final credential = AppleAuthProvider.credential(
appleUser.authorizationCode,
);
await _firebaseAuth.signInWithCredential(credential);
return 'Success';
} catch (e) {
return '$e';
}
}
我对这个解决方案有两个问题:
1.如果用户更改了他的Google或Apple电子邮件,会发生什么?fetchSignInMethodsForEmail
方法是否仍然有效?
1.在苹果的情况下,电子邮件仅在第一次授权时提供。如果没有提供电子邮件,如何检查是否有此Apple用户的帐户?
是否有更好的解决方案来确定用户是否拥有Firebase帐户?
1条答案
按热度按时间u91tlkcl1#
1.如果用户更改了他的Google或Apple电子邮件,会发生什么?fetchSignInMethodsForEmail方法是否仍然有效?
否,除非您使用User#updateEmail(String newEmail)函数用新电子邮件更新User对象。更新后,FirebaseAuth#fetchSignInMethodsForEmail(String email)将返回所需的结果。
1.在苹果的情况下,电子邮件仅在第一次授权时提供。如果没有提供电子邮件,如何检查是否有此Apple用户的帐户?
fetchSignInMethodsForEmail
函数需要一个参数。如果没有电子邮件地址,它将无法工作。是否有更好的解决方案来确定用户是否拥有Firebase帐户?
据我所知没有