From 086f53f3f6ab72edc56d1c900dd34b6457c33ae0 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Wed, 9 Oct 2024 12:08:26 -0400 Subject: [PATCH 1/2] [Auth] Restore MFA request setup to Firebase 10 behavior --- .../Enroll/FinalizeMFAEnrollmentRequest.swift | 10 +++++----- .../Unit/FinalizeMFAEnrollmentRequestTests.swift | 12 ++++++++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Enroll/FinalizeMFAEnrollmentRequest.swift b/FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Enroll/FinalizeMFAEnrollmentRequest.swift index 773b448a136..e7c478e23bd 100644 --- a/FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Enroll/FinalizeMFAEnrollmentRequest.swift +++ b/FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Enroll/FinalizeMFAEnrollmentRequest.swift @@ -64,11 +64,11 @@ class FinalizeMFAEnrollmentRequest: IdentityToolkitRequest, AuthRPCRequest { } if let displayName = displayName { body["displayName"] = displayName - if let phoneVerificationInfo { - body["phoneVerificationInfo"] = phoneVerificationInfo.dictionary - } else if let totpVerificationInfo { - body["totpVerificationInfo"] = totpVerificationInfo.dictionary - } + } + if let phoneVerificationInfo { + body["phoneVerificationInfo"] = phoneVerificationInfo.dictionary + } else if let totpVerificationInfo { + body["totpVerificationInfo"] = totpVerificationInfo.dictionary } if let tenantID = tenantID { diff --git a/FirebaseAuth/Tests/Unit/FinalizeMFAEnrollmentRequestTests.swift b/FirebaseAuth/Tests/Unit/FinalizeMFAEnrollmentRequestTests.swift index e5143ca7058..5e306fa6c10 100644 --- a/FirebaseAuth/Tests/Unit/FinalizeMFAEnrollmentRequestTests.swift +++ b/FirebaseAuth/Tests/Unit/FinalizeMFAEnrollmentRequestTests.swift @@ -29,6 +29,14 @@ class FinalizeMFAEnrollmentRequestTests: RPCBaseTests { @brief Tests the Finalize MFA Enrollment using TOTP request. */ func testTOTPStartMFAEnrollmentRequest() async throws { + try await assertTOTPStartMFAEnrollmentRequest(displayName: "sparky") + } + + func testTOTPStartMFAEnrollmentRequest_WhenDisplayNameIsNil() async throws { + try await assertTOTPStartMFAEnrollmentRequest(displayName: nil) + } + + func assertTOTPStartMFAEnrollmentRequest(displayName: String?) async throws { let kIDToken = "idToken" let kDisplayName = "displayName" let kSessionInfo = "sessionInfo" @@ -40,7 +48,7 @@ class FinalizeMFAEnrollmentRequestTests: RPCBaseTests { let requestInfo = AuthProtoFinalizeMFATOTPEnrollmentRequestInfo(sessionInfo: kSessionInfo, verificationCode: kVerificationCode) let request = FinalizeMFAEnrollmentRequest(idToken: kIDToken, - displayName: kDisplayName, + displayName: displayName, totpVerificationInfo: requestInfo, requestConfiguration: requestConfiguration) @@ -55,7 +63,7 @@ class FinalizeMFAEnrollmentRequestTests: RPCBaseTests { value: kIDToken ) let requestDictionary = try XCTUnwrap(rpcIssuer.decodedRequest as? [String: AnyHashable]) - XCTAssertEqual(requestDictionary[kDisplayName], kDisplayName) + XCTAssertEqual(requestDictionary[kDisplayName], displayName) let totpInfo = try XCTUnwrap(requestDictionary[kTOTPVerificationInfo] as? [String: String]) XCTAssertEqual(totpInfo["verificationCode"], kVerificationCode) XCTAssertNil(requestDictionary[kPhoneVerificationInfo]) From 777d7a6dac9423056a31e3f162d7c5f2973bb7ee Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Wed, 9 Oct 2024 12:11:10 -0400 Subject: [PATCH 2/2] Changelog --- FirebaseAuth/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/FirebaseAuth/CHANGELOG.md b/FirebaseAuth/CHANGELOG.md index 71cb75a1d05..c677e63f057 100644 --- a/FirebaseAuth/CHANGELOG.md +++ b/FirebaseAuth/CHANGELOG.md @@ -1,3 +1,7 @@ +# Unreleased +- [Fixed] Restore Firebase 10 behavior by ignoring `nil` display names used + during multi factor enrollment. (#13856) + # 11.3.0 - [Fixed] Restore Firebase 10 behavior by querying with the `kSecAttrSynchronizable` key when auth state is set to be shared across