Skip to content

Commit 77d6ed9

Browse files
refactor: remove currentMFARequired and make private
1 parent 087b721 commit 77d6ed9

File tree

6 files changed

+26
-29
lines changed

6 files changed

+26
-29
lines changed

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Auth/MultiFactor.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,12 @@ public struct EnrollmentSession {
100100
}
101101
}
102102

103-
public enum MFAHint {
103+
public enum MFAHint: Hashable {
104104
case phone(displayName: String?, uid: String, phoneNumber: String?)
105105
case totp(displayName: String?, uid: String)
106106
}
107107

108-
public struct MFARequired {
108+
public struct MFARequired: Hashable {
109109
public let hints: [MFAHint]
110110

111111
public init(hints: [MFAHint]) {

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthService.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public enum AuthView: Hashable {
4949
case updatePassword
5050
case mfaEnrollment
5151
case mfaManagement
52-
case mfaResolution
52+
case mfaResolution(MFARequired)
5353
case enterPhoneNumber
5454
case enterVerificationCode(verificationID: String, fullPhoneNumber: String)
5555
}
@@ -133,7 +133,6 @@ public final class AuthService {
133133
public var authenticationFlow: AuthenticationFlow = .signIn
134134

135135
public var passwordPrompt: PasswordPromptCoordinator = .init()
136-
public var currentMFARequired: MFARequired?
137136
private var currentMFAResolver: MultiFactorResolver?
138137

139138
// MARK: - Provider APIs
@@ -879,7 +878,6 @@ public extension AuthService {
879878

880879
private func handleMFARequiredError(resolver: MultiFactorResolver) -> SignInOutcome {
881880
let hints = extractMFAHints(from: resolver)
882-
currentMFARequired = MFARequired(hints: hints)
883881
currentMFAResolver = resolver
884882
return .mfaRequired(MFARequired(hints: hints))
885883
}
@@ -957,7 +955,6 @@ public extension AuthService {
957955
updateAuthenticationState()
958956

959957
// Clear MFA resolution state
960-
currentMFARequired = nil
961958
currentMFAResolver = nil
962959

963960
} catch {

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/AuthPickerView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ extension AuthPickerView: View {
5757
MFAEnrolmentView()
5858
case AuthView.mfaManagement:
5959
MFAManagementView()
60-
case AuthView.mfaResolution:
61-
MFAResolutionView()
60+
case let .mfaResolution(mfaRequired):
61+
MFAResolutionView(mfaRequired: mfaRequired)
6262
case AuthView.enterPhoneNumber:
6363
EnterPhoneNumberView()
6464
case let .enterVerificationCode(verificationID, fullPhoneNumber):

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAHandlerModifier.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ struct MFAHandlerModifier: ViewModifier {
3939
}
4040

4141
/// Handle MFA required - navigate to MFA resolution view
42-
func handleMFARequired(_: MFARequired) {
43-
authService.navigator.push(.mfaResolution)
42+
func handleMFARequired(_ mfaRequired: MFARequired) {
43+
authService.navigator.push(.mfaResolution(mfaRequired))
4444
}
4545
}
4646

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAResolutionView.swift

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ private enum FocusableField: Hashable {
2323

2424
@MainActor
2525
public struct MFAResolutionView {
26+
let mfaRequired: MFARequired
27+
2628
@Environment(AuthService.self) private var authService
2729
@Environment(\.reportError) private var reportError
2830

@@ -34,16 +36,12 @@ public struct MFAResolutionView {
3436

3537
@FocusState private var focus: FocusableField?
3638

37-
public init() {}
38-
39-
private var mfaRequired: MFARequired? {
40-
// This would be set by the sign-in flow when MFA is required
41-
authService.currentMFARequired
39+
public init(mfaRequired: MFARequired) {
40+
self.mfaRequired = mfaRequired
4241
}
4342

4443
private var selectedHint: MFAHint? {
45-
guard let mfaRequired = mfaRequired,
46-
selectedHintIndex < mfaRequired.hints.count else {
44+
guard selectedHintIndex < mfaRequired.hints.count else {
4745
return nil
4846
}
4947
return mfaRequired.hints[selectedHintIndex]
@@ -63,7 +61,7 @@ public struct MFAResolutionView {
6361
}
6462

6563
private func startSMSChallenge() {
66-
guard selectedHintIndex < (mfaRequired?.hints.count ?? 0) else { return }
64+
guard selectedHintIndex < mfaRequired.hints.count else { return }
6765

6866
Task {
6967
isLoading = true
@@ -128,7 +126,7 @@ extension MFAResolutionView: View {
128126
.padding(.horizontal)
129127

130128
// MFA Hints Selection (if multiple available)
131-
if let mfaRequired = mfaRequired, mfaRequired.hints.count > 1 {
129+
if mfaRequired.hints.count > 1 {
132130
mfaHintsSelectionView(mfaRequired: mfaRequired)
133131
}
134132

@@ -368,34 +366,36 @@ private extension MFAHint {
368366
#Preview("Phone SMS Only") {
369367
FirebaseOptions.dummyConfigurationForPreview()
370368
let authService = AuthService()
371-
authService.currentMFARequired = MFARequired(hints: [
369+
let mfaRequired = MFARequired(hints: [
372370
.phone(displayName: "Work Phone", uid: "phone-uid-1", phoneNumber: "+15551234567"),
373371
])
374-
return MFAResolutionView().environment(authService)
372+
return MFAResolutionView(mfaRequired: mfaRequired).environment(authService)
375373
}
376374

377375
#Preview("TOTP Only") {
378376
FirebaseOptions.dummyConfigurationForPreview()
379377
let authService = AuthService()
380-
authService.currentMFARequired = MFARequired(hints: [
378+
let mfaRequired = MFARequired(hints: [
381379
.totp(displayName: "Authenticator App", uid: "totp-uid-1"),
382380
])
383-
return MFAResolutionView().environment(authService)
381+
return MFAResolutionView(mfaRequired: mfaRequired).environment(authService)
384382
}
385383

386384
#Preview("Multiple Methods") {
387385
FirebaseOptions.dummyConfigurationForPreview()
388386
let authService = AuthService()
389-
authService.currentMFARequired = MFARequired(hints: [
387+
let mfaRequired = MFARequired(hints: [
390388
.phone(displayName: "Mobile", uid: "phone-uid-1", phoneNumber: "+15551234567"),
391389
.totp(displayName: "Google Authenticator", uid: "totp-uid-1"),
392390
])
393-
return MFAResolutionView().environment(authService)
391+
return MFAResolutionView(mfaRequired: mfaRequired).environment(authService)
394392
}
395393

396-
#Preview("No MFA Required") {
394+
#Preview("Single TOTP") {
397395
FirebaseOptions.dummyConfigurationForPreview()
398396
let authService = AuthService()
399-
// currentMFARequired is nil by default
400-
return MFAResolutionView().environment(authService)
397+
let mfaRequired = MFARequired(hints: [
398+
.totp(displayName: "Authenticator", uid: "totp-uid-1"),
399+
])
400+
return MFAResolutionView(mfaRequired: mfaRequired).environment(authService)
401401
}

samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/ContentView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import FirebaseOAuthSwiftUI
2525

2626
struct ContentView: View {
2727
init() {
28-
Auth.auth().useEmulator(withHost: "127.0.0.1", port: 9099)
28+
// Auth.auth().useEmulator(withHost: "127.0.0.1", port: 9099)
2929

3030
let actionCodeSettings = ActionCodeSettings()
3131

0 commit comments

Comments
 (0)