diff options
author | Zsika Phillip <protocol86@users.noreply.github.com> | 2017-11-27 14:17:05 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-27 14:17:05 -0800 |
commit | 771b0f7a6574578bd1c7d1d3c333f26173f33e92 (patch) | |
tree | 41bf8e3f124059d5b13112be7a5dec69e7d1ccd3 /Firebase/Auth | |
parent | 8c4cd9d5413e7f458001016e5faace2b610a69ce (diff) |
Adds Auth Result to Sign In with Custom token (#489)
* Adds Auth Result to Sign In with Custom token
* Addresses comomments
Diffstat (limited to 'Firebase/Auth')
-rw-r--r-- | Firebase/Auth/Source/FIRAuth.m | 74 | ||||
-rw-r--r-- | Firebase/Auth/Source/Public/FIRAuth.h | 26 | ||||
-rw-r--r-- | Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.h | 5 | ||||
-rw-r--r-- | Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.m | 1 |
4 files changed, 91 insertions, 15 deletions
diff --git a/Firebase/Auth/Source/FIRAuth.m b/Firebase/Auth/Source/FIRAuth.m index a104ad8..cadff23 100644 --- a/Firebase/Auth/Source/FIRAuth.m +++ b/Firebase/Auth/Source/FIRAuth.m @@ -790,25 +790,23 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; dispatch_async(FIRAuthGlobalWorkQueue(), ^{ FIRAuthResultCallback decoratedCallback = [self signInFlowAuthResultCallbackByDecoratingCallback:completion]; - FIRVerifyCustomTokenRequest *request = - [[FIRVerifyCustomTokenRequest alloc] initWithToken:token - requestConfiguration:_requestConfiguration]; - [FIRAuthBackend verifyCustomToken:request - callback:^(FIRVerifyCustomTokenResponse *_Nullable response, - NSError *_Nullable error) { - if (error) { - decoratedCallback(nil, error); - return; - } - [self completeSignInWithAccessToken:response.IDToken - accessTokenExpirationDate:response.approximateExpirationDate - refreshToken:response.refreshToken - anonymous:NO - callback:decoratedCallback]; + [self internalSignInAndRetrieveDataWithCustomToken:token + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + decoratedCallback(authResult.user, error); }]; }); } +- (void)signInAndRetrieveDataWithCustomToken:(NSString *)token + completion:(nullable FIRAuthDataResultCallback)completion { + dispatch_async(FIRAuthGlobalWorkQueue(), ^{ + FIRAuthDataResultCallback decoratedCallback = + [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion]; + [self internalSignInAndRetrieveDataWithCustomToken:token completion:decoratedCallback]; + }); +} + - (void)createUserWithEmail:(NSString *)email password:(NSString *)password completion:(nullable FIRAuthResultCallback)completion { @@ -1196,6 +1194,52 @@ static NSMutableDictionary *gKeychainServiceNameForAppName; } #endif +/** @fn internalSignInAndRetrieveDataWithCustomToken:completion: + @brief Signs in a Firebase user given a custom token. + @param token A self-signed custom auth token. + @param completion A block which is invoked when the custom token sign in request completes. + */ +- (void)internalSignInAndRetrieveDataWithCustomToken:(NSString *)token + completion:(nullable FIRAuthDataResultCallback) + completion { + FIRVerifyCustomTokenRequest *request = + [[FIRVerifyCustomTokenRequest alloc] initWithToken:token + requestConfiguration:_requestConfiguration]; + [FIRAuthBackend verifyCustomToken:request + callback:^(FIRVerifyCustomTokenResponse *_Nullable response, + NSError *_Nullable error) { + if (error) { + if (completion) { + completion(nil, error); + return; + } + } + [self completeSignInWithAccessToken:response.IDToken + accessTokenExpirationDate:response.approximateExpirationDate + refreshToken:response.refreshToken + anonymous:NO + callback:^(FIRUser *_Nullable user, + NSError *_Nullable error) { + if (error) { + if (completion) { + completion(nil, error); + } + return; + } + FIRAdditionalUserInfo *additonalUserInfo = + [[FIRAdditionalUserInfo alloc] initWithProviderID:nil + profile:nil + username:nil + isNewUser:response.isNewUser]; + FIRAuthDataResult *result = + [[FIRAuthDataResult alloc] initWithUser:user additionalUserInfo:additonalUserInfo]; + if (completion) { + completion(result, nil); + } + }]; + }]; +} + /** @fn internalCreateUserWithEmail:password:completion: @brief Makes a backend request attempting to create a new Firebase user given an email address and password. diff --git a/Firebase/Auth/Source/Public/FIRAuth.h b/Firebase/Auth/Source/Public/FIRAuth.h index 9a115ee..2935916 100644 --- a/Firebase/Auth/Source/Public/FIRAuth.h +++ b/Firebase/Auth/Source/Public/FIRAuth.h @@ -486,6 +486,32 @@ FIR_SWIFT_NAME(Auth) - (void)signInWithCustomToken:(NSString *)token completion:(nullable FIRAuthResultCallback)completion; +/** @fn signInAndRetrieveDataWithCustomToken:completion: + @brief Asynchronously signs in to Firebase with the given Auth token. + + @param token A self-signed custom auth token. + @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. + + @remarks Possible error codes: + <ul> + <li>@c FIRAuthErrorCodeInvalidCustomToken - Indicates a validation error with + the custom token. + </li> + <li>@c FIRAuthErrorCodeCustomTokenMismatch - Indicates the service account and the API key + belong to different projects. + </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)signInAndRetrieveDataWithCustomToken:(NSString *)token + completion:(nullable FIRAuthDataResultCallback)completion; + + /** @fn createUserWithEmail:password:completion: @brief Creates and, on success, signs in a user with the given email address and password. diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.h b/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.h index b8c215c..6957bf3 100644 --- a/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.h +++ b/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.h @@ -42,6 +42,11 @@ NS_ASSUME_NONNULL_BEGIN */ @property(nonatomic, strong, readonly, nullable) NSString *refreshToken; +/** @property isNewUser + @brief Flag indicating that the user signing in is a new user and not a returning user. + */ +@property(nonatomic, assign) BOOL isNewUser; + @end NS_ASSUME_NONNULL_END diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.m b/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.m index 12dc203..8a87141 100644 --- a/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.m +++ b/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.m @@ -26,6 +26,7 @@ _approximateExpirationDate = [dictionary[@"expiresIn"] isKindOfClass:[NSString class]] ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"expiresIn"] doubleValue]] : nil; _refreshToken = [dictionary[@"refreshToken"] copy]; + _isNewUser = [dictionary[@"isNewUser"] boolValue]; return YES; } |