aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firebase/Auth
diff options
context:
space:
mode:
authorGravatar Zsika Phillip <protocol86@users.noreply.github.com>2017-11-27 14:17:05 -0800
committerGravatar GitHub <noreply@github.com>2017-11-27 14:17:05 -0800
commit771b0f7a6574578bd1c7d1d3c333f26173f33e92 (patch)
tree41bf8e3f124059d5b13112be7a5dec69e7d1ccd3 /Firebase/Auth
parent8c4cd9d5413e7f458001016e5faace2b610a69ce (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.m74
-rw-r--r--Firebase/Auth/Source/Public/FIRAuth.h26
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.h5
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.m1
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;
}