Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 19 additions & 12 deletions FirebaseAuthUI/FUIAuth.m
Original file line number Diff line number Diff line change
Expand Up @@ -295,22 +295,29 @@ - (void)signInWithEmailHint:(NSString *)emailHint

[self.auth fetchProvidersForEmail:emailHint completion:^(NSArray<NSString *> *_Nullable providers,
NSError *_Nullable error) {
NSString *federatedProviderID = [self federatedAuthProviderFromProviders:providers];
// Google case
if ([federatedProviderID isEqualToString:FIRGoogleAuthProviderID]) {
id<FUIAuthProvider> googleProviderUI;
if (error) {
completion(nil, error);
return;
}
NSString *existingFederatedProviderID = [self federatedAuthProviderFromProviders:providers];
// Set of providers which can be auto-linked
NSSet *supportedProviders =
[NSSet setWithObjects:FIRGoogleAuthProviderID, FIRFacebookAuthProviderID, nil];
if ([supportedProviders containsObject:existingFederatedProviderID]) {
id<FUIAuthProvider> authProviderUI;
// Retrieve the FUIAuthProvider instance from FUIAuth for the existing provider ID.
for (id<FUIAuthProvider> provider in self.providers) {
if ([provider.providerID isEqualToString:FIRGoogleAuthProviderID]) {
googleProviderUI = provider;
if ([provider.providerID isEqualToString:existingFederatedProviderID]) {
authProviderUI = provider;
break;
}
}
[googleProviderUI signOut];
[googleProviderUI signInWithDefaultValue:emailHint
presentingViewController:presentingViewController
completion:^(FIRAuthCredential *_Nullable credential,
NSError *_Nullable error,
FIRAuthResultCallback _Nullable result) {
[authProviderUI signOut];
[authProviderUI signInWithDefaultValue:emailHint
presentingViewController:presentingViewController
completion:^(FIRAuthCredential *_Nullable credential,
NSError *_Nullable error,
FIRAuthResultCallback _Nullable result) {
if (error) {
completion(nil, error);
return;
Expand Down
10 changes: 10 additions & 0 deletions FirebaseGoogleAuthUI/FUIGoogleAuth.m
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ @implementation FUIGoogleAuth {
@brief The callback which should be invoked when the sign in flow completes (or is cancelled.)
*/
FIRAuthProviderSignInCompletionBlock _pendingSignInCallback;

/** @var _email
@brief The email address associated with this account.
*/
NSString *_email;
}

- (instancetype)init {
Expand Down Expand Up @@ -140,6 +145,10 @@ - (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(NSString *)sourceApplicati
return [signIn handleURL:URL sourceApplication:sourceApplication annotation:nil];
}

- (NSString *)email {
return _email;
}

#pragma mark - GIDSignInDelegate methods

- (void)signIn:(GIDSignIn *)signIn
Expand All @@ -158,6 +167,7 @@ - (void)signIn:(GIDSignIn *)signIn
}
return;
}
_email = user.profile.email;
UIActivityIndicatorView *activityView =
[FUIAuthBaseViewController addActivityIndicator:_presentingViewController.view];
[activityView startAnimating];
Expand Down