@@ -12,6 +12,8 @@ @implementation Firestack
12
12
13
13
@synthesize bridge = _bridge;
14
14
15
+ typedef void (^UserWithTokenResponse)(NSDictionary *, NSError *);
16
+
15
17
RCT_EXPORT_MODULE (Firestack);
16
18
17
19
RCT_EXPORT_METHOD (configureWithOptions:(NSDictionary *) opts
@@ -98,6 +100,28 @@ @implementation Firestack
98
100
callback: callback];
99
101
}
100
102
103
+
104
+ RCT_EXPORT_METHOD (signInWithCustomToken:
105
+ (NSString *)customToken
106
+ callback:(RCTResponseSenderBlock) callback)
107
+ {
108
+ [[FIRAuth auth ]
109
+ signInWithCustomToken: customToken
110
+ completion: ^(FIRUser *user, NSError *error) {
111
+
112
+ if (user != nil ) {
113
+ NSDictionary *userProps = [self userPropsFromFIRUser: user];
114
+ callback (@[[NSNull null ], userProps]);
115
+ } else {
116
+ NSDictionary *err =
117
+ [self handleFirebaseError: @" signinError"
118
+ error: error
119
+ withUser: user];
120
+ callback (@[err]);
121
+ }
122
+ }];
123
+ }
124
+
101
125
RCT_EXPORT_METHOD (signInWithProvider:
102
126
(NSString *)provider
103
127
token:(NSString *)authToken
@@ -114,8 +138,6 @@ @implementation Firestack
114
138
return callback (@[err]);
115
139
}
116
140
117
- NSLog (@" signinWithCredential: %@ " , credential);
118
-
119
141
@try {
120
142
[[FIRAuth auth ] signInWithCredential: credential
121
143
completion: ^(FIRUser *user, NSError *error) {
@@ -164,13 +186,21 @@ @implementation Firestack
164
186
165
187
if (user != nil ) {
166
188
// User is signed in.
167
- NSDictionary *userProps = [self userPropsFromFIRUser: user];
168
- // callback(@[[NSNull null], userProps]);
169
- [self sendJSEvent: @" listenForAuth" props: @{
170
- @" eventName" : @" user" ,
171
- @" authenticated" : @(true ),
172
- @" user" : userProps
173
- }];
189
+ [self userPropsFromFIRUserWithToken: user
190
+ andCallback: ^(NSDictionary *userProps, NSError * error) {
191
+ if (error != nil ) {
192
+ [self sendJSEvent: @" listenForAuth" props: @{
193
+ @" eventName" : @" userTokenError" ,
194
+ @" msg" : [error localizedFailureReason ]
195
+ }];
196
+ } else {
197
+ [self sendJSEvent: @" listenForAuth" props: @{
198
+ @" eventName" : @" user" ,
199
+ @" authenticated" : @(true ),
200
+ @" user" : userProps
201
+ }];
202
+ }
203
+ }];
174
204
} else {
175
205
// TODO: Update this with different error states
176
206
NSDictionary *err = @{
@@ -242,7 +272,10 @@ @implementation Firestack
242
272
completion: ^(FIRUser *user, NSError *error) {
243
273
if (user != nil ) {
244
274
NSDictionary *userProps = [self userPropsFromFIRUser: user];
245
- callback (@[[NSNull null ], userProps]);
275
+
276
+ callback (@[[NSNull null ], @{
277
+ @" user" : userProps
278
+ }]);
246
279
} else {
247
280
NSDictionary *err =
248
281
[self handleFirebaseError: @" signinError"
@@ -347,7 +380,8 @@ @implementation Firestack
347
380
withUser: user];
348
381
callback (@[err]);
349
382
} else {
350
- callback (@[[NSNull null ], @{@" token" : token}]);
383
+ NSDictionary *userProps = [self userPropsFromFIRUser: user];
384
+ callback (@[[NSNull null ], @{@" token" : token, @" user" : userProps}]);
351
385
}
352
386
}];
353
387
}
@@ -359,12 +393,13 @@ @implementation Firestack
359
393
[user getTokenWithCompletion: ^(NSString *token , NSError *_Nullable error) {
360
394
if (error) {
361
395
NSDictionary *err =
362
- [self handleFirebaseError: @" deleteUserError "
396
+ [self handleFirebaseError: @" getTokenWithCompletion "
363
397
error: error
364
398
withUser: user];
365
399
callback (@[err]);
366
400
} else {
367
- callback (@[[NSNull null ], @{@" result" : token}]);
401
+ NSDictionary *userProps = [self userPropsFromFIRUser: user];
402
+ callback (@[[NSNull null ], @{@" token" : token, @" user" : userProps}]);
368
403
}
369
404
}];
370
405
}
@@ -618,6 +653,8 @@ - (NSString *) getStorageUrl
618
653
}];
619
654
}
620
655
656
+ #pragma mark Database
657
+
621
658
#pragma mark Helpers
622
659
623
660
- (NSDictionary *) getConfig
@@ -667,7 +704,9 @@ - (NSDictionary *) userPropsFromFIRUser:(FIRUser *) user
667
704
@" email" : user.email ? user.email : @" " ,
668
705
@" emailVerified" : @(user.emailVerified ),
669
706
@" anonymous" : @(user.anonymous ),
670
- @" displayName" : user.displayName ? user.displayName : @" "
707
+ @" displayName" : user.displayName ? user.displayName : @" " ,
708
+ @" refreshToken" : user.refreshToken ,
709
+ @" providerID" : user.providerID
671
710
} mutableCopy];
672
711
673
712
if ([user valueForKey: @" photoURL" ] != nil ) {
@@ -678,6 +717,20 @@ - (NSDictionary *) userPropsFromFIRUser:(FIRUser *) user
678
717
return userProps;
679
718
}
680
719
720
+ - (void ) userPropsFromFIRUserWithToken : (FIRUser *) user
721
+ andCallback : (UserWithTokenResponse) callback
722
+ {
723
+ NSMutableDictionary *userProps = [[self userPropsFromFIRUser: user] mutableCopy ];
724
+ [user getTokenWithCompletion: ^(NSString * _Nullable token, NSError * _Nullable error) {
725
+ if (error != nil ) {
726
+ return callback (nil , error);
727
+ }
728
+
729
+ [userProps setValue: token forKey: @" idToken" ];
730
+ callback (userProps, nil );
731
+ }];
732
+ }
733
+
681
734
- (FIRAuthCredential *)getCredentialForProvider : (NSString *)provider
682
735
token : (NSString *)authToken
683
736
secret : (NSString *)authTokenSecret
0 commit comments