aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firebase/Auth/Source/FIRAuth.m
diff options
context:
space:
mode:
Diffstat (limited to 'Firebase/Auth/Source/FIRAuth.m')
-rw-r--r--Firebase/Auth/Source/FIRAuth.m46
1 files changed, 46 insertions, 0 deletions
diff --git a/Firebase/Auth/Source/FIRAuth.m b/Firebase/Auth/Source/FIRAuth.m
index dc3154f..d4ced9c 100644
--- a/Firebase/Auth/Source/FIRAuth.m
+++ b/Firebase/Auth/Source/FIRAuth.m
@@ -1137,6 +1137,52 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
});
}
+- (void)updateCurrentUser:(FIRUser *)user completion:(nullable FIRUserUpdateCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ if (!user) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion([FIRAuthErrorUtils nullUserErrorWithMessage:nil]);
+ });
+ }
+ return;
+ }
+ void (^updateUserBlock)(FIRUser *user) = ^(FIRUser *user) {
+ NSError *error;
+ [self updateCurrentUser:user byForce:YES savingToDisk:YES error:(&error)];
+ if (error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(error);
+ });
+ }
+ return;
+ } if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(nil);
+ });
+ }
+ };
+ if (![user.requestConfiguration.APIKey isEqualToString:self->_requestConfiguration.APIKey]) {
+ // If the API keys are different, then we need to confirm that the user belongs to the same
+ // project before proceeding.
+ user.requestConfiguration = self->_requestConfiguration;
+ [user reloadWithCompletion:^(NSError *_Nullable error) {
+ if (error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(error);
+ });
+ }
+ return;
+ }
+ updateUserBlock(user);
+ }];
+ } else {
+ updateUserBlock(user);
+ }
+ });
+}
- (BOOL)signOut:(NSError *_Nullable __autoreleasing *_Nullable)error {
__block BOOL result = YES;