Skip to content

Commit ef0077e

Browse files
fix(auth, apple): bug with cached AuthCredential, hash key was producing different value (#12957)
1 parent a100829 commit ef0077e

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

packages/firebase_auth/firebase_auth/ios/Classes/FLTFirebaseAuthPlugin.m

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,14 @@ + (FlutterError *)convertToFlutterError:(NSError *)error {
193193
additionalData[kArgumentEmail] = [error userInfo][FIRAuthErrorUserInfoEmailKey];
194194
}
195195
// We want to store the credential if present for future sign in if the exception contains a
196-
// credential
197-
[FLTFirebaseAuthPlugin storeAuthCredentialIfPresent:error];
196+
// credential, we pass a token back to Flutter to allow retreival of the credential.
197+
NSNumber *token = [FLTFirebaseAuthPlugin storeAuthCredentialIfPresent:error];
198198

199199
// additionalData.authCredential
200200
if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) {
201201
FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey];
202-
additionalData[@"authCredential"] = [PigeonParser getPigeonAuthCredential:authCredential];
202+
additionalData[@"authCredential"] = [PigeonParser getPigeonAuthCredential:authCredential
203+
token:token];
203204
}
204205

205206
// Manual message overrides to ensure messages/codes matches other platforms.
@@ -641,14 +642,16 @@ static void handleAppleAuthResult(FLTFirebaseAuthPlugin *object, AuthPigeonFireb
641642

642643
#pragma mark - Utilities
643644

644-
+ (void)storeAuthCredentialIfPresent:(NSError *)error {
645+
+ (NSNumber *_Nullable)storeAuthCredentialIfPresent:(NSError *)error {
645646
if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) {
646647
FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey];
647648
// We temporarily store the non-serializable credential so the
648649
// Dart API can consume these at a later time.
649650
NSNumber *authCredentialHash = @([authCredential hash]);
650651
credentialsMap[authCredentialHash] = authCredential;
652+
return authCredentialHash;
651653
}
654+
return nil;
652655
}
653656

654657
- (FIRAuth *_Nullable)getFIRAuthFromAppNameFromPigeon:(AuthPigeonFirebaseApp *)pigeonApp {

packages/firebase_auth/firebase_auth/ios/Classes/PigeonParser.m

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ @implementation PigeonParser
1515
makeWithUser:[self getPigeonDetails:authResult.user]
1616
additionalUserInfo:[self getPigeonAdditionalUserInfo:authResult.additionalUserInfo
1717
authorizationCode:authorizationCode]
18-
credential:[self getPigeonAuthCredential:authResult.credential]];
18+
credential:[self getPigeonAuthCredential:authResult.credential token:nil]];
1919
}
2020

2121
+ (PigeonUserCredential *)getPigeonUserCredentialFromFIRUser:(nonnull FIRUser *)user {
@@ -88,7 +88,8 @@ + (PigeonTotpSecret *)getPigeonTotpSecret:(FIRTOTPSecret *)secret {
8888
secretKey:secret.sharedSecretKey];
8989
}
9090

91-
+ (PigeonAuthCredential *)getPigeonAuthCredential:(FIRAuthCredential *)authCredential {
91+
+ (PigeonAuthCredential *)getPigeonAuthCredential:(FIRAuthCredential *)authCredential
92+
token:(NSNumber *_Nullable)token {
9293
if (authCredential == nil) {
9394
return nil;
9495
}
@@ -103,9 +104,12 @@ + (PigeonAuthCredential *)getPigeonAuthCredential:(FIRAuthCredential *)authCrede
103104
}
104105
}
105106

107+
NSUInteger nativeId =
108+
token != nil ? [token unsignedLongValue] : (NSUInteger)[authCredential hash];
109+
106110
return [PigeonAuthCredential makeWithProviderId:authCredential.provider
107111
signInMethod:authCredential.provider
108-
nativeId:@([authCredential hash])
112+
nativeId:nativeId
109113
accessToken:accessToken ?: nil];
110114
}
111115

packages/firebase_auth/firebase_auth/ios/Classes/Private/PigeonParser.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@
2323
+ (PigeonIdTokenResult *_Nonnull)parseIdTokenResult:(nonnull FIRAuthTokenResult *)tokenResult;
2424
+ (PigeonTotpSecret *_Nonnull)getPigeonTotpSecret:(nonnull FIRTOTPSecret *)secret;
2525
+ (PigeonAuthCredential *_Nullable)getPigeonAuthCredential:
26-
(FIRAuthCredential *_Nullable)authCredential;
26+
(FIRAuthCredential *_Nullable)authCredentialToken
27+
token:(NSNumber *_Nullable)token;
2728
@end

0 commit comments

Comments
 (0)