diff options
author | Zsika Phillip <protocol86@users.noreply.github.com> | 2017-11-20 15:56:03 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-20 15:56:03 -0800 |
commit | 54aef651d82ebcc529498e4eba945a5512af4c95 (patch) | |
tree | e82d83503560c6f5dd77156bdf5ff9044071a38d /Firebase | |
parent | 1670f1c5ddf1d9b4fab6b9b6d0e00323af48e967 (diff) |
Add Auth Result to createUserWithEmail (#477)
Diffstat (limited to 'Firebase')
-rw-r--r-- | Firebase/Auth/Source/FIRAuth.m | 82 | ||||
-rw-r--r-- | Firebase/Auth/Source/Public/FIRAuth.h | 34 |
2 files changed, 99 insertions, 17 deletions
diff --git a/Firebase/Auth/Source/FIRAuth.m b/Firebase/Auth/Source/FIRAuth.m index fda84fa..9020d3f 100644 --- a/Firebase/Auth/Source/FIRAuth.m +++ b/Firebase/Auth/Source/FIRAuth.m @@ -770,23 +770,10 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; dispatch_async(FIRAuthGlobalWorkQueue(), ^{ FIRAuthResultCallback decoratedCallback = [self signInFlowAuthResultCallbackByDecoratingCallback:completion]; - FIRSignUpNewUserRequest *request = - [[FIRSignUpNewUserRequest alloc] initWithEmail:email - password:password - displayName:nil - requestConfiguration:_requestConfiguration]; - if (![request.password length]) { - decoratedCallback(nil, [FIRAuthErrorUtils - weakPasswordErrorWithServerResponseReason:kMissingPasswordReason]); - return; - } - if (![request.email length]) { - decoratedCallback(nil, [FIRAuthErrorUtils missingEmailErrorWithMessage:nil]); - return; - } - [FIRAuthBackend signUpNewUser:request - callback:^(FIRSignUpNewUserResponse *_Nullable response, - NSError *_Nullable error) { + [self internalCreateUserWithEmail:email + password:password + completion:^(FIRSignUpNewUserResponse *_Nullable response, + NSError *_Nullable error) { if (error) { decoratedCallback(nil, error); return; @@ -800,6 +787,40 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; }); } +- (void)createUserAndRetrieveDataWithEmail:(NSString *)email + password:(NSString *)password + completion:(FIRAuthDataResultCallback)completion { + dispatch_async(FIRAuthGlobalWorkQueue(), ^{ + FIRAuthDataResultCallback decoratedCallback = + [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion]; + [self internalCreateUserWithEmail:email + password:password + completion:^(FIRSignUpNewUserResponse *_Nullable response, + NSError *_Nullable error) { + if (error) { + decoratedCallback(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:FIREmailAuthProviderID + profile:nil + username:nil + isNewUser:YES]; + FIRAuthDataResult *authDataResult = + [[FIRAuthDataResult alloc] initWithUser:user + additionalUserInfo:additionalUserInfo]; + decoratedCallback(authDataResult, nil); + }]; + }]; + }); +} + - (void)confirmPasswordResetWithCode:(NSString *)code newPassword:(NSString *)newPassword completion:(FIRConfirmPasswordResetCallback)completion { @@ -1130,6 +1151,33 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; } #endif +/** @fn internalCreateUserWithEmail:password:completion: + @brief Makes a backend request attempting to create a new Firebase user given an email address + and password. + @param email The email address used to create the new Firebase user. + @param password The password used to create the new Firebase user. + @param completion Optionally; a block which is invoked when the request finishes. + */ +- (void)internalCreateUserWithEmail:(NSString *)email + password:(NSString *)password + completion:(nullable FIRSignupNewUserCallback)completion { + FIRSignUpNewUserRequest *request = + [[FIRSignUpNewUserRequest alloc] initWithEmail:email + password:password + displayName:nil + requestConfiguration:_requestConfiguration]; + if (![request.password length]) { + completion(nil, [FIRAuthErrorUtils + weakPasswordErrorWithServerResponseReason:kMissingPasswordReason]); + return; + } + if (![request.email length]) { + completion(nil, [FIRAuthErrorUtils missingEmailErrorWithMessage:nil]); + return; + } + [FIRAuthBackend signUpNewUser:request callback:completion]; +} + /** @fn internalSignInAnonymouslyWithCompletion: @param completion A block which is invoked when the anonymous sign in request completes. */ diff --git a/Firebase/Auth/Source/Public/FIRAuth.h b/Firebase/Auth/Source/Public/FIRAuth.h index 2963d7b..1aa4bcf 100644 --- a/Firebase/Auth/Source/Public/FIRAuth.h +++ b/Firebase/Auth/Source/Public/FIRAuth.h @@ -484,6 +484,40 @@ FIR_SWIFT_NAME(Auth) password:(NSString *)password completion:(nullable FIRAuthResultCallback)completion; +/** @fn createUserAndRetrieveDataWithEmail:password:completion: + @brief Creates and, on success, signs in a user with the given email address and password. + + @param email The user's email address. + @param password The user's desired password. + @param completion Optionally; a block which is invoked when the sign up flow finishes, or is + canceled. Invoked asynchronously on the main thread in the future. + + @remarks Possible error codes: + <ul> + <li>@c FIRAuthErrorCodeInvalidEmail - Indicates the email address is malformed. + </li> + <li>@c FIRAuthErrorCodeEmailAlreadyInUse - Indicates the email used to attempt sign up + already exists. Call fetchProvidersForEmail to check which sign-in mechanisms the user + used, and prompt the user to sign in with one of those. + </li> + <li>@c FIRAuthErrorCodeOperationNotAllowed - Indicates that email and password accounts + are not enabled. Enable them in the Auth section of the Firebase console. + </li> + <li>@c FIRAuthErrorCodeWeakPassword - Indicates an attempt to set a password that is + considered too weak. The NSLocalizedFailureReasonErrorKey field in the NSError.userInfo + dictionary object will contain more detailed explanation that can be shown to the user. + </li> + </ul> + + @remarks See @c 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 @c createUserWithEmail:password:completion: will + support the @c FIRAuthDataResultCallback. + */ +- (void)createUserAndRetrieveDataWithEmail:(NSString *)email + password:(NSString *)password + completion:(nullable FIRAuthDataResultCallback)completion; + /** @fn confirmPasswordResetWithCode:newPassword:completion: @brief Resets the password given a code sent to the user outside of the app and a new password for the user. |