From 9172e6eb7a8fe29d8b1c001ae212f935d2de3af3 Mon Sep 17 00:00:00 2001 From: Zsika Phillip Date: Mon, 8 Jan 2018 15:40:31 -0800 Subject: Adds AdditionalUserInfo to Phone Auth (#623) --- Example/Auth/Sample/MainViewController.m | 14 +++++++-- Firebase/Auth/Source/FIRAuth.m | 54 ++++++++++++++------------------ 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/Example/Auth/Sample/MainViewController.m b/Example/Auth/Sample/MainViewController.m index f9e2273..31c103a 100644 --- a/Example/Auth/Sample/MainViewController.m +++ b/Example/Auth/Sample/MainViewController.m @@ -2715,15 +2715,23 @@ static NSDictionary *parseURL(NSString *urlString) { FIRAuthCredential *credential = [[AppManager phoneAuthProvider] credentialWithVerificationID:verificationID verificationCode:verificationCode]; - [[AppManager auth] signInWithCredential:credential - completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[AppManager auth] signInAndRetrieveDataWithCredential:credential + completion:^(FIRAuthDataResult *_Nullable result, + NSError *_Nullable error) { [self hideSpinner:^{ if (error) { [self logFailure:@"failed to verify phone number" error:error]; [self showMessagePrompt:error.localizedDescription]; return; } + if (_isNewUserToggleOn) { + NSString *newUserString = result.additionalUserInfo.isNewUser ? + @"New user" : @"Existing user"; + [self showMessagePromptWithTitle:@"New or Existing" + message:newUserString + showCancelButton:NO + completion:nil]; + } }]; }]; }]; diff --git a/Firebase/Auth/Source/FIRAuth.m b/Firebase/Auth/Source/FIRAuth.m index ad363e0..311f8ba 100644 --- a/Firebase/Auth/Source/FIRAuth.m +++ b/Firebase/Auth/Source/FIRAuth.m @@ -657,12 +657,29 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; isReauthentication ? FIRAuthOperationTypeReauth : FIRAuthOperationTypeSignUpOrSignIn; [self signInWithPhoneCredential:phoneCredential operation:operation - callback:^(FIRUser *_Nullable user, + callback:^(FIRVerifyPhoneNumberResponse *_Nullable response, NSError *_Nullable error) { if (callback) { - FIRAuthDataResult *result = user ? - [[FIRAuthDataResult alloc] initWithUser:user additionalUserInfo:nil] : nil; - callback(result, error); + if (error) { + callback(nil, error); + return; + } + + [self completeSignInWithAccessToken:response.IDToken + accessTokenExpirationDate:response.approximateExpirationDate + refreshToken:response.refreshToken + anonymous:NO + callback:^(FIRUser *_Nullable user, NSError *_Nullable error) { + FIRAdditionalUserInfo *additionalUserInfo = + [[FIRAdditionalUserInfo alloc] initWithProviderID:FIRPhoneAuthProviderID + profile:nil + username:nil + isNewUser:response.isNewUser]; + FIRAuthDataResult *result = user ? + [[FIRAuthDataResult alloc] initWithUser:user + additionalUserInfo:additionalUserInfo] : nil; + callback(result, error); + }]; } }]; return; @@ -1143,14 +1160,14 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; */ - (void)signInWithPhoneCredential:(FIRPhoneAuthCredential *)credential operation:(FIRAuthOperationType)operation - callback:(FIRAuthResultCallback)callback { + callback:(FIRVerifyPhoneNumberResponseCallback)callback { if (credential.temporaryProof.length && credential.phoneNumber.length) { FIRVerifyPhoneNumberRequest *request = [[FIRVerifyPhoneNumberRequest alloc] initWithTemporaryProof:credential.temporaryProof phoneNumber:credential.phoneNumber operation:operation requestConfiguration:_requestConfiguration]; - [self phoneNumberSignInWithRequest:request callback:callback]; + [FIRAuthBackend verifyPhoneNumber:request callback:callback]; return; } @@ -1167,32 +1184,9 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; verificationCode:credential.verificationCode operation:operation requestConfiguration:_requestConfiguration]; - [self phoneNumberSignInWithRequest:request callback:callback]; + [FIRAuthBackend verifyPhoneNumber:request callback:callback]; } - -/** @fn phoneNumberSignInWithVerificationID:pasverificationCodesword:callback: - @brief Signs in using a FIRVerifyPhoneNumberRequest object. - @param request THe FIRVerifyPhoneNumberRequest request object. - @param callback A block which is invoked when the sign in finishes (or is cancelled.) Invoked - asynchronously on the global auth work queue in the future. - */ -- (void)phoneNumberSignInWithRequest:(FIRVerifyPhoneNumberRequest *)request - callback:(FIRAuthResultCallback)callback { - [FIRAuthBackend verifyPhoneNumber:request - callback:^(FIRVerifyPhoneNumberResponse *_Nullable response, - NSError *_Nullable error) { - if (error) { - callback(nil, error); - return; - } - [self completeSignInWithAccessToken:response.IDToken - accessTokenExpirationDate:response.approximateExpirationDate - refreshToken:response.refreshToken - anonymous:NO - callback:callback]; - }]; -} #endif /** @fn internalSignInAndRetrieveDataWithCustomToken:completion: -- cgit v1.2.3