Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions FirebaseAuth/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
in methods and a `nil` error. In such cases, an empty array is instead
returned with the `nil` error. (#13550)
- [Fixed] Fixed user session persistence in multi tenant projects. Introduced in 11.0.0. (#13565)
- [Fixed] Fixed encoding crash that occurs when using TOTP multi-factor
authentication. Note that this fix will not be in the 11.2.0 zip and Carthage
distributions, but will be included from 11.3.0 onwards. (#13591)

# 11.1.0
- [fixed] Fixed `Swift.error` conformance for `AuthErrorCode`. (#13430)
Expand Down
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Despite being marked unavailable, this class's init?(coder:) is actually called when totp is registered:

coder.encode(enrolledFactors, forKey: kEnrolledFactorsCodingKey)

Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,13 @@ import Foundation
super.init(proto: proto, factorID: PhoneMultiFactorInfo.TOTPMultiFactorID)
}

@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
totpInfo = nil
super.init(coder: coder)
}

override class var supportsSecureCoding: Bool {
super.supportsSecureCoding
}
}
#endif
32 changes: 22 additions & 10 deletions FirebaseAuth/Tests/Unit/UserTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -141,12 +141,20 @@ class UserTests: RPCBaseTests {
"phoneNumber": kPhoneNumber,
"createdAt": String(Int(kCreationDateTimeIntervalInSeconds) * 1000), // to nanoseconds
"lastLoginAt": String(Int(kLastSignInDateTimeIntervalInSeconds) * 1000),
"mfaInfo": [[
"phoneInfo": kPhoneInfo,
"mfaEnrollmentId": kEnrollmentID,
"displayName": kDisplayName,
"enrolledAt": kEnrolledAt,
]],
"mfaInfo": [
[
"phoneInfo": kPhoneInfo,
"mfaEnrollmentId": kEnrollmentID,
"displayName": kDisplayName,
"enrolledAt": kEnrolledAt,
],
[
"totpInfo": "123456",
"mfaEnrollmentId": kEnrollmentID,
"displayName": kDisplayName,
"enrolledAt": kEnrolledAt,
],
],
]]

let expectation = self.expectation(description: #function)
Expand Down Expand Up @@ -346,11 +354,15 @@ class UserTests: RPCBaseTests {

// Verify MultiFactorInfo properties.
let enrolledFactors = try XCTUnwrap(user.multiFactor.enrolledFactors)
XCTAssertEqual(enrolledFactors.count, 2)
XCTAssertEqual(enrolledFactors[0].factorID, PhoneMultiFactorInfo.PhoneMultiFactorID)
XCTAssertEqual(enrolledFactors[0].uid, kEnrollmentID)
XCTAssertEqual(enrolledFactors[0].displayName, self.kDisplayName)
let date = try XCTUnwrap(enrolledFactors[0].enrollmentDate)
XCTAssertEqual("\(date)", kEnrolledAtMatch)
XCTAssertEqual(enrolledFactors[1].factorID, PhoneMultiFactorInfo.TOTPMultiFactorID)
for enrolledFactor in enrolledFactors {
XCTAssertEqual(enrolledFactor.uid, kEnrollmentID)
XCTAssertEqual(enrolledFactor.displayName, self.kDisplayName)
let date = try XCTUnwrap(enrolledFactor.enrollmentDate)
XCTAssertEqual("\(date)", kEnrolledAtMatch)
}
#endif
} catch {
XCTFail("Caught an error in \(#function): \(error)")
Expand Down
Loading