Skip to content

Commit a4db26e

Browse files
authored
feat(auth): add signInSecondFactor property to IdTokenResult for MFA support (#17589)
1 parent ac59c24 commit a4db26e

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

packages/firebase_auth/firebase_auth_platform_interface/lib/src/id_token_result.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,15 @@ class IdTokenResult {
4646
/// custom, phone, password, etc). Note, this does not map to provider IDs.
4747
String? get signInProvider => _data.signInProvider;
4848

49+
/// The type of second factor associated with this session, provided the user
50+
/// was multi-factor authenticated (for example, phone, etc.).
51+
String? get signInSecondFactor => _data.signInSecondFactor;
52+
4953
/// The Firebase Auth ID token JWT string.
5054
String? get token => _data.token;
5155

5256
@override
5357
String toString() {
54-
return '$IdTokenResult(authTime: $authTime, claims: $claims, expirationTime: $expirationTime, issuedAtTime: $issuedAtTime, signInProvider: $signInProvider, token: $token)';
58+
return '$IdTokenResult(authTime: $authTime, claims: $claims, expirationTime: $expirationTime, issuedAtTime: $issuedAtTime, signInProvider: $signInProvider, signInSecondFactor: $signInSecondFactor, token: $token)';
5559
}
5660
}

packages/firebase_auth/firebase_auth_platform_interface/test/id_token_result_test.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:flutter_test/flutter_test.dart';
99

1010
void main() {
1111
const String kMockSignInProvider = 'password';
12+
const String kMockSignInSecondFactor = 'phone';
1213
const String kMockToken = 'test-token';
1314
const int kMockExpirationTimestamp = 1234566;
1415
const int kMockAuthTimestamp = 1234567;
@@ -23,6 +24,7 @@ void main() {
2324
authTimestamp: kMockAuthTimestamp,
2425
expirationTimestamp: kMockExpirationTimestamp,
2526
signInProvider: kMockSignInProvider,
27+
signInSecondFactor: kMockSignInSecondFactor,
2628
token: kMockToken);
2729

2830
group('$IdTokenResult', () {
@@ -38,6 +40,8 @@ void main() {
3840
expect(idTokenResult.issuedAtTime!.millisecondsSinceEpoch,
3941
equals(kMockIssuedAtTimestamp));
4042
expect(idTokenResult.signInProvider, equals(kMockSignInProvider));
43+
expect(
44+
idTokenResult.signInSecondFactor, equals(kMockSignInSecondFactor));
4145
expect(idTokenResult.token, equals(kMockToken));
4246
});
4347
});
@@ -53,6 +57,7 @@ void main() {
5357
authTimestamp: kMockAuthTimestamp,
5458
expirationTimestamp: kMockExpirationTimestamp,
5559
signInProvider: kMockSignInProvider,
60+
signInSecondFactor: kMockSignInSecondFactor,
5661
token: kMockToken);
5762

5863
final testIdTokenResult = IdTokenResult(kMockData);
@@ -62,7 +67,7 @@ void main() {
6267

6368
test('toString()', () {
6469
expect(idTokenResult.toString(),
65-
'$IdTokenResult(authTime: ${idTokenResult.authTime}, claims: $kMockClaims, expirationTime: ${idTokenResult.expirationTime}, issuedAtTime: ${idTokenResult.issuedAtTime}, signInProvider: $kMockSignInProvider, token: $kMockToken)');
70+
'$IdTokenResult(authTime: ${idTokenResult.authTime}, claims: $kMockClaims, expirationTime: ${idTokenResult.expirationTime}, issuedAtTime: ${idTokenResult.issuedAtTime}, signInProvider: $kMockSignInProvider, signInSecondFactor: $kMockSignInSecondFactor, token: $kMockToken)');
6671
});
6772
});
6873
}

0 commit comments

Comments
 (0)