Skip to content

Commit 1fe3323

Browse files
committed
[Auth] Swift 6 improvesments for RecaptchaVerifier
1 parent c5bf1e5 commit 1fe3323

File tree

4 files changed

+245
-265
lines changed

4 files changed

+245
-265
lines changed

FirebaseAuth/Sources/Swift/Auth/Auth.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,6 +1297,8 @@ extension Auth: AuthInterop {
12971297
return false
12981298
}
12991299

1300+
let recaptchaVerifier: AuthRecaptchaVerifier
1301+
13001302
#if os(iOS) && !targetEnvironment(macCatalyst)
13011303

13021304
/// Initializes reCAPTCHA using the settings configured for the project or tenant.
@@ -1326,8 +1328,10 @@ extension Auth: AuthInterop {
13261328
open func initializeRecaptchaConfig() async throws {
13271329
// Trigger recaptcha verification flow to initialize the recaptcha client and
13281330
// config. Recaptcha token will be returned.
1329-
let verifier = AuthRecaptchaVerifier.shared(auth: self)
1330-
_ = try await verifier.verify(forceRefresh: true, action: AuthRecaptchaAction.defaultAction)
1331+
_ = try await recaptchaVerifier.verify(
1332+
forceRefresh: true,
1333+
action: AuthRecaptchaAction.defaultAction
1334+
)
13311335
}
13321336
#endif
13331337

@@ -1627,7 +1631,8 @@ extension Auth: AuthInterop {
16271631
init(app: FirebaseApp,
16281632
keychainStorageProvider: AuthKeychainStorage = AuthKeychainStorageReal(),
16291633
backend: AuthBackend = .init(rpcIssuer: AuthBackendRPCIssuer()),
1630-
authDispatcher: AuthDispatcher = .init()) {
1634+
authDispatcher: AuthDispatcher = .init(),
1635+
recaptchaVerifier: AuthRecaptchaVerifier = .init()) {
16311636
self.app = app
16321637
mainBundleUrlTypes = Bundle.main
16331638
.object(forInfoDictionaryKey: "CFBundleURLTypes") as? [[String: Any]]
@@ -1653,6 +1658,7 @@ extension Auth: AuthInterop {
16531658
appCheck: appCheck)
16541659
self.backend = backend
16551660
self.authDispatcher = authDispatcher
1661+
self.recaptchaVerifier = recaptchaVerifier
16561662

16571663
let keychainServiceName = Auth.keychainServiceName(for: app)
16581664
keychainServices = AuthKeychainServices(service: keychainServiceName,
@@ -1664,6 +1670,7 @@ extension Auth: AuthInterop {
16641670

16651671
super.init()
16661672
requestConfiguration.auth = self
1673+
self.recaptchaVerifier.auth = self
16671674

16681675
protectedDataInitialization()
16691676
}
@@ -2307,7 +2314,6 @@ extension Auth: AuthInterop {
23072314
func injectRecaptcha<T: AuthRPCRequest>(request: T,
23082315
action: AuthRecaptchaAction) async throws -> T
23092316
.Response {
2310-
let recaptchaVerifier = AuthRecaptchaVerifier.shared(auth: self)
23112317
if recaptchaVerifier.enablementStatus(forProvider: AuthRecaptchaProvider.password) != .off {
23122318
try await recaptchaVerifier.injectRecaptchaFields(request: request,
23132319
provider: AuthRecaptchaProvider.password,

FirebaseAuth/Sources/Swift/AuthProvider/PhoneAuthProvider.swift

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ import Foundation
218218
)
219219
}
220220

221-
try await recaptchaVerifier.retrieveRecaptchaConfig(forceRefresh: true)
221+
try await auth.recaptchaVerifier.retrieveRecaptchaConfig(forceRefresh: true)
222222

223-
switch recaptchaVerifier.enablementStatus(forProvider: .phone) {
223+
switch auth.recaptchaVerifier.enablementStatus(forProvider: .phone) {
224224
case .off:
225225
return try await verifyClAndSendVerificationCode(
226226
toPhoneNumber: phoneNumber,
@@ -233,31 +233,28 @@ import Foundation
233233
toPhoneNumber: phoneNumber,
234234
retryOnInvalidAppCredential: true,
235235
multiFactorSession: multiFactorSession,
236-
uiDelegate: uiDelegate,
237-
recaptchaVerifier: recaptchaVerifier
236+
uiDelegate: uiDelegate
238237
)
239238
case .enforce:
240239
return try await verifyClAndSendVerificationCodeWithRecaptcha(
241240
toPhoneNumber: phoneNumber,
242241
retryOnInvalidAppCredential: false,
243242
multiFactorSession: multiFactorSession,
244-
uiDelegate: uiDelegate,
245-
recaptchaVerifier: recaptchaVerifier
243+
uiDelegate: uiDelegate
246244
)
247245
}
248246
}
249247

250248
func verifyClAndSendVerificationCodeWithRecaptcha(toPhoneNumber phoneNumber: String,
251249
retryOnInvalidAppCredential: Bool,
252-
uiDelegate: AuthUIDelegate?,
253-
recaptchaVerifier: AuthRecaptchaVerifier) async throws
250+
uiDelegate: AuthUIDelegate?) async throws
254251
-> String? {
255252
let request = SendVerificationCodeRequest(phoneNumber: phoneNumber,
256253
codeIdentity: CodeIdentity.empty,
257254
requestConfiguration: auth
258255
.requestConfiguration)
259256
do {
260-
try await recaptchaVerifier.injectRecaptchaFields(
257+
try await auth.recaptchaVerifier.injectRecaptchaFields(
261258
request: request,
262259
provider: .phone,
263260
action: .sendVerificationCode
@@ -319,8 +316,7 @@ import Foundation
319316
private func verifyClAndSendVerificationCodeWithRecaptcha(toPhoneNumber phoneNumber: String,
320317
retryOnInvalidAppCredential: Bool,
321318
multiFactorSession session: MultiFactorSession?,
322-
uiDelegate: AuthUIDelegate?,
323-
recaptchaVerifier: AuthRecaptchaVerifier) async throws
319+
uiDelegate: AuthUIDelegate?) async throws
324320
-> String? {
325321
if let settings = auth.settings,
326322
settings.isAppVerificationDisabledForTesting {
@@ -336,8 +332,7 @@ import Foundation
336332
return try await verifyClAndSendVerificationCodeWithRecaptcha(
337333
toPhoneNumber: phoneNumber,
338334
retryOnInvalidAppCredential: retryOnInvalidAppCredential,
339-
uiDelegate: uiDelegate,
340-
recaptchaVerifier: recaptchaVerifier
335+
uiDelegate: uiDelegate
341336
)
342337
}
343338
let startMFARequestInfo = AuthProtoStartMFAPhoneRequestInfo(phoneNumber: phoneNumber,
@@ -347,7 +342,7 @@ import Foundation
347342
let request = StartMFAEnrollmentRequest(idToken: idToken,
348343
enrollmentInfo: startMFARequestInfo,
349344
requestConfiguration: auth.requestConfiguration)
350-
try await recaptchaVerifier.injectRecaptchaFields(
345+
try await auth.recaptchaVerifier.injectRecaptchaFields(
351346
request: request,
352347
provider: .phone,
353348
action: .mfaSmsEnrollment
@@ -359,7 +354,7 @@ import Foundation
359354
MFAEnrollmentID: session.multiFactorInfo?.uid,
360355
signInInfo: startMFARequestInfo,
361356
requestConfiguration: auth.requestConfiguration)
362-
try await recaptchaVerifier.injectRecaptchaFields(
357+
try await auth.recaptchaVerifier.injectRecaptchaFields(
363358
request: request,
364359
provider: .phone,
365360
action: .mfaSmsSignIn
@@ -641,7 +636,6 @@ import Foundation
641636
private let auth: Auth
642637
private let callbackScheme: String
643638
private let usingClientIDScheme: Bool
644-
private var recaptchaVerifier: AuthRecaptchaVerifier?
645639

646640
init(auth: Auth) {
647641
self.auth = auth
@@ -662,7 +656,6 @@ import Foundation
662656
return
663657
}
664658
callbackScheme = ""
665-
recaptchaVerifier = AuthRecaptchaVerifier.shared(auth: auth)
666659
}
667660

668661
private let kAuthTypeVerifyApp = "verifyApp"

0 commit comments

Comments
 (0)