Skip to content

Commit 35fae50

Browse files
fix: ensure errors are reported from MFA Views
1 parent de5b950 commit 35fae50

3 files changed

Lines changed: 53 additions & 35 deletions

File tree

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAEnrolmentView.swift

Lines changed: 48 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ private enum FocusableField: Hashable {
2626
@MainActor
2727
public struct MFAEnrolmentView {
2828
@Environment(AuthService.self) private var authService
29+
@Environment(\.reportError) private var reportError
2930

3031
@State private var selectedFactorType: SecondFactorType = .sms
3132
@State private var phoneNumber = ""
@@ -81,12 +82,16 @@ public struct MFAEnrolmentView {
8182
isLoading = true
8283
defer { isLoading = false }
8384

84-
let session = try await authService.startMfaEnrollment(
85-
type: selectedFactorType,
86-
accountName: authService.currentUser?.email,
87-
issuer: authService.configuration.mfaIssuer
88-
)
89-
currentSession = session
85+
do {
86+
let session = try await authService.startMfaEnrollment(
87+
type: selectedFactorType,
88+
accountName: authService.currentUser?.email,
89+
issuer: authService.configuration.mfaIssuer
90+
)
91+
currentSession = session
92+
} catch {
93+
reportError?(error)
94+
}
9095
}
9196
}
9297

@@ -97,23 +102,27 @@ public struct MFAEnrolmentView {
97102
isLoading = true
98103
defer { isLoading = false }
99104

100-
let fullPhoneNumber = selectedCountry.dialCode + phoneNumber
101-
let verificationId = try await authService.sendSmsVerificationForEnrollment(
102-
session: session,
103-
phoneNumber: fullPhoneNumber
104-
)
105-
// Update session status
106-
currentSession = EnrollmentSession(
107-
id: session.id,
108-
type: session.type,
109-
session: session.session,
110-
totpInfo: session.totpInfo,
111-
phoneNumber: fullPhoneNumber,
112-
verificationId: verificationId,
113-
status: .verificationSent,
114-
createdAt: session.createdAt,
115-
expiresAt: session.expiresAt
116-
)
105+
do {
106+
let fullPhoneNumber = selectedCountry.dialCode + phoneNumber
107+
let verificationId = try await authService.sendSmsVerificationForEnrollment(
108+
session: session,
109+
phoneNumber: fullPhoneNumber
110+
)
111+
// Update session status
112+
currentSession = EnrollmentSession(
113+
id: session.id,
114+
type: session.type,
115+
session: session.session,
116+
totpInfo: session.totpInfo,
117+
phoneNumber: fullPhoneNumber,
118+
verificationId: verificationId,
119+
status: .verificationSent,
120+
createdAt: session.createdAt,
121+
expiresAt: session.expiresAt
122+
)
123+
} catch {
124+
reportError?(error)
125+
}
117126
}
118127
}
119128

@@ -124,18 +133,22 @@ public struct MFAEnrolmentView {
124133
isLoading = true
125134
defer { isLoading = false }
126135

127-
let code = session.type == .sms ? verificationCode : totpCode
128-
try await authService.completeEnrollment(
129-
session: session,
130-
verificationId: session.verificationId,
131-
verificationCode: code,
132-
displayName: displayName
133-
)
134-
135-
// Reset form state on success
136-
resetForm()
137-
138-
authService.navigator.clear()
136+
do {
137+
let code = session.type == .sms ? verificationCode : totpCode
138+
try await authService.completeEnrollment(
139+
session: session,
140+
verificationId: session.verificationId,
141+
verificationCode: code,
142+
displayName: displayName
143+
)
144+
145+
// Reset form state on success
146+
resetForm()
147+
148+
authService.navigator.clear()
149+
} catch {
150+
reportError?(error)
151+
}
139152
}
140153
}
141154

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAManagementView.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ extension MultiFactorInfo: Identifiable {
2323
@MainActor
2424
public struct MFAManagementView {
2525
@Environment(AuthService.self) private var authService
26+
@Environment(\.reportError) private var reportError
2627

2728
@State private var enrolledFactors: [MultiFactorInfo] = []
2829
@State private var isLoading = false
@@ -43,6 +44,7 @@ public struct MFAManagementView {
4344
enrolledFactors = freshFactors
4445
isLoading = false
4546
} catch {
47+
reportError?(error)
4648
isLoading = false
4749
}
4850
}

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAResolutionView.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ private enum FocusableField: Hashable {
2424
@MainActor
2525
public struct MFAResolutionView {
2626
@Environment(AuthService.self) private var authService
27+
@Environment(\.reportError) private var reportError
2728

2829
@State private var verificationCode = ""
2930
@State private var totpCode = ""
@@ -72,6 +73,7 @@ public struct MFAResolutionView {
7273
self.verificationId = verificationId
7374
isLoading = false
7475
} catch {
76+
reportError?(error)
7577
isLoading = false
7678
}
7779
}
@@ -93,6 +95,7 @@ public struct MFAResolutionView {
9395
authService.navigator.clear()
9496
isLoading = false
9597
} catch {
98+
reportError?(error)
9699
isLoading = false
97100
}
98101
}

0 commit comments

Comments
 (0)