diff options
-rw-r--r-- | Example/Auth/Sample/MainViewController.m | 64 | ||||
-rw-r--r-- | Example/Auth/Tests/FIRAuthTests.m | 75 | ||||
-rw-r--r-- | Example/Auth/Tests/FIRUserTests.m | 9 | ||||
-rw-r--r-- | Firebase/Auth/Source/FIRAuth.m | 38 | ||||
-rw-r--r-- | Firebase/Auth/Source/Public/FIRAuth.h | 89 |
5 files changed, 178 insertions, 97 deletions
diff --git a/Example/Auth/Sample/MainViewController.m b/Example/Auth/Sample/MainViewController.m index d4915cd..4c9ec13 100644 --- a/Example/Auth/Sample/MainViewController.m +++ b/Example/Auth/Sample/MainViewController.m @@ -143,7 +143,7 @@ static NSString *const kSignInEmailPasswordButtonText = @"Sign in with Email/Pas @brief The text of the "Email/Password SignIn (AuthDataResult)" button. */ static NSString *const kSignInEmailPasswordAuthDataResultButtonText = - @"Sign in with Email/Password (AuthDataReult)"; + @"Sign in with Email/Password (Deprecated)"; /** @var kSignInWithCustomTokenButtonText @brief The text of the "Sign In (BYOAuth)" button. @@ -154,7 +154,7 @@ static NSString *const kSignInWithCustomTokenButtonText = @"Sign In (BYOAuth)"; @brief The text of the "Sign In with Custom Token (Auth Result)" button. */ static NSString *const kSignInWithCustomAuthResultTokenButtonText = @"Sign In with Custom Token" - " (Auth Result)"; + " (Deprecated)"; /** @var kSignInAnonymouslyButtonText @brief The text of the "Sign In Anonymously" button. @@ -165,7 +165,7 @@ static NSString *const kSignInAnonymouslyButtonText = @"Sign In Anonymously"; @brief The text of the "Sign In Anonymously (AuthDataResult)" button. */ static NSString *const kSignInAnonymouslyWithAuthResultButtonText = - @"Sign In Anonymously (AuthDataResult)"; + @"Sign In Anonymously (Deprecated)"; /** @var kSignedInAlertTitle @brief The text of the "Sign In Succeeded" alert. @@ -1226,11 +1226,13 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { return; } [auth signOut:NULL]; - [self signInAnonymouslyWithCallback:^(FIRUser *_Nullable user, NSError *_Nullable error) { - if (user) { - NSString *anonymousUID = user.uid; - [self signInAnonymouslyWithCallback:^(FIRUser *_Nullable user, NSError *_Nullable error) { - if (![user.uid isEqual:anonymousUID]) { + [self signInAnonymouslyWithCallback:^(FIRAuthDataResult *_Nullable result, + NSError *_Nullable error) { + if (result.user) { + NSString *anonymousUID = result.user.uid; + [self signInAnonymouslyWithCallback:^(FIRAuthDataResult *_Nullable user, + NSError *_Nullable error) { + if (![result.user.uid isEqual:anonymousUID]) { [self logFailedTest:@"Consecutive anonymous sign-ins should yeild the same User ID"]; return; } @@ -1244,13 +1246,13 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { @brief Performs anonymous sign in and then executes callback. @param callback The callback to be executed. */ -- (void)signInAnonymouslyWithCallback:(nullable FIRAuthResultCallback)callback { +- (void)signInAnonymouslyWithCallback:(nullable FIRAuthDataResultCallback)callback { FIRAuth *auth = [AppManager auth]; if (!auth) { [self logFailedTest:@"Could not obtain auth object."]; return; } - [auth signInAnonymouslyWithCompletion:^(FIRUser *_Nullable user, + [auth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { [self logFailure:@"sign-in anonymously failed" error:error]; @@ -1259,7 +1261,7 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { } [self logSuccess:@"sign-in anonymously succeeded."]; if (callback) { - callback(user, nil); + callback(result, nil); } }]; } @@ -1275,9 +1277,10 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { return; } [auth signOut:NULL]; - [self signInAnonymouslyWithCallback:^(FIRUser *_Nullable user, NSError *_Nullable error) { - if (user) { - NSString *anonymousUID = user.uid; + [self signInAnonymouslyWithCallback:^(FIRAuthDataResult *_Nullable result, + NSError *_Nullable error) { + if (result.user) { + NSString *anonymousUID = result.user.uid; [self showMessagePromptWithTitle:@"Sign In Instructions" message:kUnlinkAccountMessagePrompt showCancelButton:NO @@ -1287,7 +1290,8 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { callback:^(FIRAuthCredential *credential, NSError *error) { if (credential) { - [user linkWithCredential:credential completion:^(FIRUser *user, NSError *error) { + [result.user linkWithCredential:credential completion:^(FIRUser *user, + NSError *error) { if (error) { [self logFailure:@"link auth provider failed" error:error]; [self logFailedTest:@"Account needs to be linked to complete the test."]; @@ -1346,7 +1350,7 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { } FIRAuth *auth = [AppManager auth]; [auth signInWithCustomToken:customToken - completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { + completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { [self logFailure:@"sign-in with custom token failed" error:error]; [self logFailedTest:@"A fresh custom token should succeed in signing-in."]; @@ -1364,7 +1368,8 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { [self logSuccess:@"refresh token succeeded."]; [auth signOut:NULL]; [auth signInWithCustomToken:expiredCustomToken - completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { + completion:^(FIRAuthDataResult *_Nullable result, + NSError *_Nullable error) { if (!error) { [self logSuccess:@"sign-in with custom token succeeded."]; [self logFailedTest:@"sign-in with an expired custom token should NOT succeed."]; @@ -1372,7 +1377,7 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { } [self logFailure:@"sign-in with custom token failed" error:error]; [auth signInWithCustomToken:kInvalidCustomToken - completion:^(FIRUser *_Nullable user, + completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (!error) { [self logSuccess:@"sign-in with custom token succeeded."]; @@ -1405,7 +1410,8 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { return; } [[AppManager auth] signInWithCustomToken:customToken - completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { + completion:^(FIRAuthDataResult *_Nullable user, + NSError *_Nullable error) { if (error) { [self logFailure:@"sign-in with custom token failed" error:error]; [self logFailedTest:@"A fresh custom token should succeed in signing-in."]; @@ -1435,7 +1441,8 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { return; } [[AppManager auth] signInWithCustomToken:customToken - completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { + completion:^(FIRAuthDataResult *_Nullable result, + NSError *_Nullable error) { if (error) { [self logFailure:@"sign-in with custom token failed" error:error]; [self logFailedTest:@"A fresh custom token should succeed in signing-in."]; @@ -1683,7 +1690,7 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { @brief Invoked when "Sign in with Google" row is pressed. */ - (void)signInGoogle { - [self signinWithProvider:[AuthProviders google] retrieveData:NO]; + [self signinWithProvider:[AuthProviders google] retrieveData:YES]; } /** @fn signInGoogleAndRetrieveData @@ -1697,7 +1704,7 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { @brief Invoked when "Sign in with Facebook" row is pressed. */ - (void)signInFacebook { - [self signinWithProvider:[AuthProviders facebook] retrieveData:NO]; + [self signinWithProvider:[AuthProviders facebook] retrieveData:YES]; } /** @fn signInFacebookAndRetrieveData @@ -3149,12 +3156,13 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { @brief Signs in as an anonymous user. */ - (void)signInAnonymously { - [[AppManager auth] signInAnonymouslyWithCompletion:^(FIRUser *_Nullable user, + [[AppManager auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { [self logFailure:@"sign-in anonymously failed" error:error]; } else { [self logSuccess:@"sign-in anonymously succeeded."]; + [self log:[NSString stringWithFormat:@"User ID : %@", result.user.uid]]; } [self showTypicalUIForUserUpdateResultsWithTitle:kSignInAnonymouslyButtonText error:error]; }]; @@ -3190,8 +3198,9 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { FIRAuthCredential *credential = [FIROAuthProvider credentialWithProviderID:FIRGitHubAuthProviderID accessToken:accessToken]; if (credential) { - [[AppManager auth] signInWithCredential:credential completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[AppManager auth] signInWithCredential:credential + completion:^(FIRUser *_Nullable result, + NSError *_Nullable error) { if (error) { [self logFailure:@"sign-in with provider failed" error:error]; } else { @@ -3338,7 +3347,8 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { - (void)doSignInWithCustomToken:(NSString *_Nullable)userEnteredTokenText { [[AppManager auth] signInWithCustomToken:userEnteredTokenText - completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { + completion:^(FIRAuthDataResult *_Nullable result, + NSError *_Nullable error) { if (error) { [self logFailure:@"sign-in with custom token failed" error:error]; [self showMessagePromptWithTitle:kSignInErrorAlertTitle @@ -3349,7 +3359,7 @@ static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) { } [self logSuccess:@"sign-in with custom token succeeded."]; [self showMessagePromptWithTitle:kSignedInAlertTitle - message:user.displayName + message:result.user.displayName showCancelButton:NO completion:nil]; }]; diff --git a/Example/Auth/Tests/FIRAuthTests.m b/Example/Auth/Tests/FIRAuthTests.m index 47a430b..d238057 100644 --- a/Example/Auth/Tests/FIRAuthTests.m +++ b/Example/Auth/Tests/FIRAuthTests.m @@ -712,10 +712,10 @@ static const NSTimeInterval kWaitInterval = .5; [[FIRAuth auth] signOut:NULL]; [[FIRAuth auth] signInWithEmail:kEmail password:kFakePassword - completion:^(FIRUser *_Nullable user, + completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); - [self assertUser:user]; + [self assertUser:result.user]; XCTAssertNil(error); [expectation fulfill]; }]; @@ -734,10 +734,10 @@ static const NSTimeInterval kWaitInterval = .5; [[FIRAuth auth] signOut:NULL]; [[FIRAuth auth] signInWithEmail:kEmail password:kFakePassword - completion:^(FIRUser *_Nullable user, + completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); - XCTAssertNil(user); + XCTAssertNil(result.user); XCTAssertEqual(error.code, FIRAuthErrorCodeWrongPassword); XCTAssertNotNil(error.userInfo[NSLocalizedDescriptionKey]); [expectation fulfill]; @@ -1071,8 +1071,9 @@ static const NSTimeInterval kWaitInterval = .5; [[FIRAuth auth] signOut:NULL]; FIRAuthCredential *emailCredential = [FIREmailAuthProvider credentialWithEmail:kEmail link:kFakeEmailSignInlink]; - [[FIRAuth auth] signInWithCredential:emailCredential completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithCredential:emailCredential + completion:^(FIRUser *_Nullable user, + NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); XCTAssertNil(user); XCTAssertEqual(error.code, FIRAuthErrorCodeUserDisabled); @@ -1107,8 +1108,9 @@ static const NSTimeInterval kWaitInterval = .5; [[FIRAuth auth] signOut:NULL]; FIRAuthCredential *emailCredential = [FIREmailAuthProvider credentialWithEmail:kEmail password:kFakePassword]; - [[FIRAuth auth] signInWithCredential:emailCredential completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithCredential:emailCredential + completion:^(FIRUser *_Nullable user, + NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); [self assertUser:user]; XCTAssertNil(error); @@ -1145,8 +1147,9 @@ static const NSTimeInterval kWaitInterval = .5; FIRAuthCredential *emailCredential = [FIREmailPasswordAuthProvider credentialWithEmail:kEmail password:kFakePassword]; #pragma clang diagnostic pop - [[FIRAuth auth] signInWithCredential:emailCredential completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithCredential:emailCredential + completion:^(FIRUser *_Nullable user, + NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); [self assertUser:user]; XCTAssertNil(error); @@ -1168,8 +1171,9 @@ static const NSTimeInterval kWaitInterval = .5; [[FIRAuth auth] signOut:NULL]; FIRAuthCredential *emailCredential = [FIREmailAuthProvider credentialWithEmail:kEmail password:kFakePassword]; - [[FIRAuth auth] signInWithCredential:emailCredential completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithCredential:emailCredential + completion:^(FIRUser *_Nullable user, + NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); XCTAssertNil(user); XCTAssertEqual(error.code, FIRAuthErrorCodeUserDisabled); @@ -1193,8 +1197,8 @@ static const NSTimeInterval kWaitInterval = .5; [[FIRAuth auth] signOut:NULL]; FIRAuthCredential *emailCredential = [FIREmailAuthProvider credentialWithEmail:kEmail password:emptyString]; - [[FIRAuth auth] signInWithCredential:emailCredential completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithCredential:emailCredential + completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); XCTAssertEqual(error.code, FIRAuthErrorCodeWrongPassword); [expectation fulfill]; @@ -1228,8 +1232,9 @@ static const NSTimeInterval kWaitInterval = .5; [[FIRAuth auth] signOut:NULL]; FIRAuthCredential *googleCredential = [FIRGoogleAuthProvider credentialWithIDToken:kGoogleIDToken accessToken:kGoogleAccessToken]; - [[FIRAuth auth] signInWithCredential:googleCredential completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithCredential:googleCredential + completion:^(FIRUser *_Nullable user, + NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); XCTAssertEqual(error.code, FIRAuthErrorCodeAccountExistsWithDifferentCredential); XCTAssertEqualObjects(error.userInfo[FIRAuthErrorUserInfoEmailKey], kEmail); @@ -1267,8 +1272,9 @@ static const NSTimeInterval kWaitInterval = .5; [[FIRAuth auth] signOut:NULL]; FIRAuthCredential *googleCredential = [FIRGoogleAuthProvider credentialWithIDToken:kGoogleIDToken accessToken:kGoogleAccessToken]; - [[FIRAuth auth] signInWithCredential:googleCredential completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithCredential:googleCredential + completion:^(FIRUser *_Nullable user, + NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); [self assertUserGoogle:user]; XCTAssertNil(error); @@ -1336,8 +1342,9 @@ static const NSTimeInterval kWaitInterval = .5; [[FIRAuth auth] signOut:NULL]; FIRAuthCredential *googleCredential = [FIRGoogleAuthProvider credentialWithIDToken:kGoogleIDToken accessToken:kGoogleAccessToken]; - [[FIRAuth auth] signInWithCredential:googleCredential completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithCredential:googleCredential + completion:^(FIRUser *_Nullable user, + NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); XCTAssertNil(user); XCTAssertEqual(error.code, FIRAuthErrorCodeEmailAlreadyInUse); @@ -1369,10 +1376,10 @@ static const NSTimeInterval kWaitInterval = .5; [self expectGetAccountInfoAnonymous]; XCTestExpectation *expectation = [self expectationWithDescription:@"callback"]; [[FIRAuth auth] signOut:NULL]; - [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRUser *_Nullable user, + [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); - [self assertUserAnonymous:user]; + [self assertUserAnonymous:result.user]; XCTAssertNil(error); [expectation fulfill]; }]; @@ -1389,10 +1396,10 @@ static const NSTimeInterval kWaitInterval = .5; .andDispatchError2([FIRAuthErrorUtils operationNotAllowedErrorWithMessage:nil]); XCTestExpectation *expectation = [self expectationWithDescription:@"callback"]; [[FIRAuth auth] signOut:NULL]; - [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRUser *_Nullable user, + [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); - XCTAssertNil(user); + XCTAssertNil(result.user); XCTAssertEqual(error.code, FIRAuthErrorCodeOperationNotAllowed); XCTAssertNotNil(error.userInfo[NSLocalizedDescriptionKey]); [expectation fulfill]; @@ -1474,10 +1481,10 @@ static const NSTimeInterval kWaitInterval = .5; [self expectGetAccountInfo]; XCTestExpectation *expectation = [self expectationWithDescription:@"callback"]; [[FIRAuth auth] signOut:NULL]; - [[FIRAuth auth] signInWithCustomToken:kCustomToken completion:^(FIRUser *_Nullable user, + [[FIRAuth auth] signInWithCustomToken:kCustomToken completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); - [self assertUser:user]; + [self assertUser:result.user]; XCTAssertNil(error); [expectation fulfill]; }]; @@ -1494,10 +1501,11 @@ static const NSTimeInterval kWaitInterval = .5; .andDispatchError2([FIRAuthErrorUtils invalidCustomTokenErrorWithMessage:nil]); XCTestExpectation *expectation = [self expectationWithDescription:@"callback"]; [[FIRAuth auth] signOut:NULL]; - [[FIRAuth auth] signInWithCustomToken:kCustomToken completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithCustomToken:kCustomToken + completion:^(FIRAuthDataResult *_Nullable result, + NSError *_Nullable error) { XCTAssertTrue([NSThread isMainThread]); - XCTAssertNil(user); + XCTAssertNil(result.user); XCTAssertEqual(error.code, FIRAuthErrorCodeInvalidCustomToken); XCTAssertNotNil(error.userInfo[NSLocalizedDescriptionKey]); [expectation fulfill]; @@ -2434,13 +2442,14 @@ static const NSTimeInterval kWaitInterval = .5; }); [self expectGetAccountInfoWithAccessToken:accessToken]; XCTestExpectation *expectation = [self expectationWithDescription:@"callback"]; - [[FIRAuth auth] signInWithEmail:kEmail password:kFakePassword completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { + [[FIRAuth auth] signInWithEmail:kEmail + password:kFakePassword + completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { - user.requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:APIKey]; + result.user.requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:APIKey]; [expectation fulfill]; if (completion) { - completion(user, error); + completion(result.user, error); } }]; [self waitForExpectationsWithTimeout:kExpectationTimeout handler:nil]; diff --git a/Example/Auth/Tests/FIRUserTests.m b/Example/Auth/Tests/FIRUserTests.m index a27304c..7a6c165 100644 --- a/Example/Auth/Tests/FIRUserTests.m +++ b/Example/Auth/Tests/FIRUserTests.m @@ -2244,11 +2244,12 @@ static const NSTimeInterval kExpectationTimeout = 2; }); [self expectGetAccountInfoWithMockUserInfoResponse:mockUserInfoResponse]; [[FIRAuth auth] signOut:NULL]; - [[FIRAuth auth] signInWithEmail:kEmail password:kFakePassword completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { - XCTAssertNotNil(user); + [[FIRAuth auth] signInWithEmail:kEmail + password:kFakePassword + completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNotNil(result.user); XCTAssertNil(error); - completion(user); + completion(result.user); }]; } diff --git a/Firebase/Auth/Source/FIRAuth.m b/Firebase/Auth/Source/FIRAuth.m index 1930957..5ec9a6f 100644 --- a/Firebase/Auth/Source/FIRAuth.m +++ b/Firebase/Auth/Source/FIRAuth.m @@ -551,15 +551,15 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; - (void)signInWithEmail:(NSString *)email password:(NSString *)password - completion:(FIRAuthResultCallback)completion { + completion:(FIRAuthDataResultCallback)completion { dispatch_async(FIRAuthGlobalWorkQueue(), ^{ - FIRAuthResultCallback decoratedCallback = - [self signInFlowAuthResultCallbackByDecoratingCallback:completion]; + FIRAuthDataResultCallback decoratedCallback = + [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion]; [self internalSignInAndRetrieveDataWithEmail:email password:password completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { - decoratedCallback(authResult.user, error); + decoratedCallback(authResult, error); }]; }); } @@ -887,12 +887,14 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; }); } -- (void)signInAnonymouslyWithCompletion:(FIRAuthResultCallback)completion { +- (void)signInAnonymouslyWithCompletion:(FIRAuthDataResultCallback)completion { dispatch_async(FIRAuthGlobalWorkQueue(), ^{ - FIRAuthResultCallback decoratedCallback = - [self signInFlowAuthResultCallbackByDecoratingCallback:completion]; + FIRAuthDataResultCallback decoratedCallback = + [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion]; if (self->_currentUser.anonymous) { - decoratedCallback(self->_currentUser, nil); + FIRAuthDataResult *result = + [[FIRAuthDataResult alloc] initWithUser:self->_currentUser additionalUserInfo:nil]; + decoratedCallback(result, nil); return; } [self internalSignInAnonymouslyWithCompletion:^(FIRSignUpNewUserResponse *_Nullable response, @@ -905,20 +907,30 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; accessTokenExpirationDate:response.approximateExpirationDate refreshToken:response.refreshToken anonymous:YES - callback:decoratedCallback]; + callback:^(FIRUser * _Nullable user, NSError * _Nullable error) { + FIRAdditionalUserInfo *additionalUserInfo = + [[FIRAdditionalUserInfo alloc] initWithProviderID:FIREmailAuthProviderID + profile:nil + username:nil + isNewUser:YES]; + FIRAuthDataResult *authDataResult = + [[FIRAuthDataResult alloc] initWithUser:user + additionalUserInfo:additionalUserInfo]; + decoratedCallback(authDataResult, nil); + }]; }]; }); } - (void)signInWithCustomToken:(NSString *)token - completion:(nullable FIRAuthResultCallback)completion { + completion:(nullable FIRAuthDataResultCallback)completion { dispatch_async(FIRAuthGlobalWorkQueue(), ^{ - FIRAuthResultCallback decoratedCallback = - [self signInFlowAuthResultCallbackByDecoratingCallback:completion]; + FIRAuthDataResultCallback decoratedCallback = + [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion]; [self internalSignInAndRetrieveDataWithCustomToken:token completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { - decoratedCallback(authResult.user, error); + decoratedCallback(authResult, error); }]; }); } diff --git a/Firebase/Auth/Source/Public/FIRAuth.h b/Firebase/Auth/Source/Public/FIRAuth.h index 711e4b6..c20ecbe 100644 --- a/Firebase/Auth/Source/Public/FIRAuth.h +++ b/Firebase/Auth/Source/Public/FIRAuth.h @@ -370,7 +370,7 @@ NS_SWIFT_NAME(Auth) */ - (void)signInWithEmail:(NSString *)email password:(NSString *)password - completion:(nullable FIRAuthResultCallback)completion; + completion:(nullable FIRAuthDataResultCallback)completion; /** @fn signInWithEmail:link:completion: @brief Signs in using an email address and email sign-in link. @@ -397,7 +397,8 @@ NS_SWIFT_NAME(Auth) completion:(nullable FIRAuthDataResultCallback)completion; /** @fn signInAndRetrieveDataWithEmail:password:completion: - @brief Signs in using an email address and password. + @brief Please use `signInWithEmail:password:completion:` for Objective-C or + `signIn(withEmail:password:completion:)` for Swift instead. @param email The user's email address. @param password The user's password. @@ -417,23 +418,62 @@ NS_SWIFT_NAME(Auth) @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods. - - @remarks This method will only exist until the next major Firebase release following 4.x.x. - After the next major release the method `signInWithEmail:password:completion:` will support - the `FIRAuthDataResultCallback`. */ - (void)signInAndRetrieveDataWithEmail:(NSString *)email password:(NSString *)password - completion:(nullable FIRAuthDataResultCallback)completion; + completion:(nullable FIRAuthDataResultCallback)completion + DEPRECATED_MSG_ATTRIBUTE( + "signInAndRetrieveDataWithEmail:password:completion: is " + "deprecated. Please use" + " signInWithEmail:password:completion: for Objective-C or" + " signIn(withEmail:password:completion:) for Swift instead."); /** @fn signInWithCredential:completion: - @brief Please use `signInAndRetrieveDataWithCredential:completion:` instead. This method - doesn't return additional identity provider data. + @brief Please use `signInAndRetrieveDataWithCredential:completion:` for Objective-C or + `signInAndRetrieveData(with:completion:)` for swift instead + + @param credential The credential supplied by the IdP. + @param completion Optionally; a block which is invoked when the sign in flow finishes, or is + canceled. Invoked asynchronously on the main thread in the future. + + @remarks Possible error codes: + + + `FIRAuthErrorCodeInvalidCredential` - Indicates the supplied credential is invalid. + This could happen if it has expired or it is malformed. + + `FIRAuthErrorCodeOperationNotAllowed` - Indicates that accounts + with the identity provider represented by the credential are not enabled. + Enable them in the Auth section of the Firebase console. + + `FIRAuthErrorCodeAccountExistsWithDifferentCredential` - Indicates the email asserted + by the credential (e.g. the email in a Facebook access token) is already in use by an + existing account, that cannot be authenticated with this sign-in method. Call + fetchProvidersForEmail for this user’s email and then prompt them to sign in with any of + the sign-in providers returned. This error will only be thrown if the "One account per + email address" setting is enabled in the Firebase console, under Auth settings. + + `FIRAuthErrorCodeUserDisabled` - Indicates the user's account is disabled. + + `FIRAuthErrorCodeWrongPassword` - Indicates the user attempted sign in with an + incorrect password, if credential is of the type EmailPasswordAuthCredential. + + `FIRAuthErrorCodeInvalidEmail` - Indicates the email address is malformed. + + `FIRAuthErrorCodeMissingVerificationID` - Indicates that the phone auth credential was + created with an empty verification ID. + + `FIRAuthErrorCodeMissingVerificationCode` - Indicates that the phone auth credential + was created with an empty verification code. + + `FIRAuthErrorCodeInvalidVerificationCode` - Indicates that the phone auth credential + was created with an invalid verification Code. + + `FIRAuthErrorCodeInvalidVerificationID` - Indicates that the phone auth credential was + created with an invalid verification ID. + + `FIRAuthErrorCodeSessionExpired` - Indicates that the SMS code has expired. + + + + @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods */ - (void)signInWithCredential:(FIRAuthCredential *)credential - completion:(nullable FIRAuthResultCallback)completion - DEPRECATED_MSG_ATTRIBUTE("signInWithCredential: is deprecated. Please use " - "signInAndRetrieveDataWithCredential:completion:` instead."); + completion:(nullable FIRAuthResultCallback)completion DEPRECATED_MSG_ATTRIBUTE( + "signInWithCredential:completion: is" + " deprecated. Please use" + " signInAndRetrieveDataWithCredential:completion: for" + " Objective-C or signInAndRetrieveData(with:completion:) for" + " Swift instead."); /** @fn signInAndRetrieveDataWithCredential:completion: @brief Asynchronously signs in to Firebase with the given 3rd-party credentials (e.g. a Facebook @@ -473,7 +513,7 @@ NS_SWIFT_NAME(Auth) - @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods. + @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods */ - (void)signInAndRetrieveDataWithCredential:(FIRAuthCredential *)credential completion:(nullable FIRAuthDataResultCallback)completion; @@ -493,10 +533,11 @@ NS_SWIFT_NAME(Auth) @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods. */ -- (void)signInAnonymouslyWithCompletion:(nullable FIRAuthResultCallback)completion; +- (void)signInAnonymouslyWithCompletion:(nullable FIRAuthDataResultCallback)completion; /** @fn signInAnonymouslyAndRetrieveDataWithCompletion: - @brief Asynchronously creates and becomes an anonymous user. + @brief `Please use sign `signInAnonymouslyWithCompletion:` for Objective-C or + `signInAnonymously(Completion:)` for Swift instead. @param completion Optionally; a block which is invoked when the sign in finishes, or is canceled. Invoked asynchronously on the main thread in the future. @@ -516,7 +557,10 @@ NS_SWIFT_NAME(Auth) `FIRAuthDataResultCallback`. */ - (void)signInAnonymouslyAndRetrieveDataWithCompletion: - (nullable FIRAuthDataResultCallback)completion; + (nullable FIRAuthDataResultCallback)completion + DEPRECATED_MSG_ATTRIBUTE("signInAnonymouslyAndRetrieveDataWithCompletion: is deprecated." + " Please use signInAnonymouslyWithCompletion: for Objective-C or" + " signInAnonymously(Completion:) for swift instead."); /** @fn signInWithCustomToken:completion: @brief Asynchronously signs in to Firebase with the given Auth token. @@ -537,10 +581,11 @@ NS_SWIFT_NAME(Auth) @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods. */ - (void)signInWithCustomToken:(NSString *)token - completion:(nullable FIRAuthResultCallback)completion; + completion:(nullable FIRAuthDataResultCallback)completion; /** @fn signInAndRetrieveDataWithCustomToken:completion: - @brief Asynchronously signs in to Firebase with the given Auth token. + @brief Please use `signInWithCustomToken:completion:` or `signIn(withCustomToken:completion:)` + for Swift instead. @param token A self-signed custom auth token. @param completion Optionally; a block which is invoked when the sign in finishes, or is @@ -563,8 +608,12 @@ NS_SWIFT_NAME(Auth) support the `FIRAuthDataResultCallback`. */ - (void)signInAndRetrieveDataWithCustomToken:(NSString *)token - completion:(nullable FIRAuthDataResultCallback)completion; - + completion:(nullable FIRAuthDataResultCallback)completion + DEPRECATED_MSG_ATTRIBUTE( + "signInAndRetrieveDataWithCustomToken:completion: is" + " deprecated. Please use signInWithCustomToken:completion:" + "for Objective-C or signIn(withCustomToken:completion:) for" + " Swift instead."); /** @fn createUserWithEmail:password:completion: @brief Creates and, on success, signs in a user with the given email address and password. |