From eef57090082e8bea8dbc75e57b819b0e0fee1fe0 Mon Sep 17 00:00:00 2001 From: Zsika Phillip Date: Fri, 16 Feb 2018 01:01:49 -0800 Subject: [PATCH 1/2] Facebook support for email_in_user_when_upgrading Adds support for Facebook when autolinking an exisiting user to a new federated user (Google). --- FirebaseAuthUI/FUIAuth.m | 23 +++++++++++++++-------- FirebaseGoogleAuthUI/FUIGoogleAuth.m | 10 ++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/FirebaseAuthUI/FUIAuth.m b/FirebaseAuthUI/FUIAuth.m index 09319e2efcf..9e73f9b530d 100644 --- a/FirebaseAuthUI/FUIAuth.m +++ b/FirebaseAuthUI/FUIAuth.m @@ -295,18 +295,25 @@ - (void)signInWithEmailHint:(NSString *)emailHint [self.auth fetchProvidersForEmail:emailHint completion:^(NSArray *_Nullable providers, NSError *_Nullable error) { - NSString *federatedProviderID = [self federatedAuthProviderFromProviders:providers]; - // Google case - if ([federatedProviderID isEqualToString:FIRGoogleAuthProviderID]) { - id 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 authProviderUI; + // Retrieve the FUIAuthProvider instance from FUIAuth for the existing provider ID. for (id provider in self.providers) { - if ([provider.providerID isEqualToString:FIRGoogleAuthProviderID]) { - googleProviderUI = provider; + if ([provider.providerID isEqualToString:existingFederatedProviderID]) { + authProviderUI = provider; break; } } - [googleProviderUI signOut]; - [googleProviderUI signInWithDefaultValue:emailHint + [authProviderUI signOut]; + [authProviderUI signInWithDefaultValue:emailHint presentingViewController:presentingViewController completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error, diff --git a/FirebaseGoogleAuthUI/FUIGoogleAuth.m b/FirebaseGoogleAuthUI/FUIGoogleAuth.m index eab9962e320..38cea1ca7d7 100644 --- a/FirebaseGoogleAuthUI/FUIGoogleAuth.m +++ b/FirebaseGoogleAuthUI/FUIGoogleAuth.m @@ -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 { @@ -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 @@ -158,6 +167,7 @@ - (void)signIn:(GIDSignIn *)signIn } return; } + _email = user.profile.email; UIActivityIndicatorView *activityView = [FUIAuthBaseViewController addActivityIndicator:_presentingViewController.view]; [activityView startAnimating]; From d84627f096f883d3d2776bcb7f0902952b6b57f2 Mon Sep 17 00:00:00 2001 From: Zsika Phillip Date: Fri, 16 Feb 2018 10:31:54 -0800 Subject: [PATCH 2/2] Addresses comments --- FirebaseAuthUI/FUIAuth.m | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/FirebaseAuthUI/FUIAuth.m b/FirebaseAuthUI/FUIAuth.m index 9e73f9b530d..2d9a37e6c67 100644 --- a/FirebaseAuthUI/FUIAuth.m +++ b/FirebaseAuthUI/FUIAuth.m @@ -302,7 +302,7 @@ - (void)signInWithEmailHint:(NSString *)emailHint NSString *existingFederatedProviderID = [self federatedAuthProviderFromProviders:providers]; // Set of providers which can be auto-linked NSSet *supportedProviders = - [NSSet setWithObjects:FIRGoogleAuthProviderID,FIRFacebookAuthProviderID, nil]; + [NSSet setWithObjects:FIRGoogleAuthProviderID, FIRFacebookAuthProviderID, nil]; if ([supportedProviders containsObject:existingFederatedProviderID]) { id authProviderUI; // Retrieve the FUIAuthProvider instance from FUIAuth for the existing provider ID. @@ -314,10 +314,10 @@ - (void)signInWithEmailHint:(NSString *)emailHint } [authProviderUI signOut]; [authProviderUI signInWithDefaultValue:emailHint - presentingViewController:presentingViewController - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result) { + presentingViewController:presentingViewController + completion:^(FIRAuthCredential *_Nullable credential, + NSError *_Nullable error, + FIRAuthResultCallback _Nullable result) { if (error) { completion(nil, error); return;