fix(biometric) prompt for fallback credentials when enabled and biometry unavailable on iOS (fix #2632) (#2633)

This commit is contained in:
Patrick F.
2025-04-16 16:56:43 -04:00
committed by GitHub
parent c97e9c511d
commit 10f9e66e32
2 changed files with 12 additions and 5 deletions

View File

@@ -0,0 +1,6 @@
---
"biometric": patch:bug
"biometric-js": patch:bug
---
Fix biometric plugin ignoring fallback logic when biometry status is unavailable or not enrolled on iOS.

View File

@@ -98,7 +98,12 @@ class BiometricPlugin: Plugin {
}
@objc func authenticate(_ invoke: Invoke) throws {
guard self.status.available else {
let args = try invoke.parseArgs(AuthOptions.self)
let allowDeviceCredential = args.allowDeviceCredential ?? false
guard self.status.available || allowDeviceCredential else {
// Biometry unavailable, fallback disabled
invoke.reject(
self.status.errorReason ?? "",
code: self.status.errorCode ?? ""
@@ -106,15 +111,11 @@ class BiometricPlugin: Plugin {
return
}
let args = try invoke.parseArgs(AuthOptions.self)
let context = LAContext()
context.localizedFallbackTitle = args.fallbackTitle
context.localizedCancelTitle = args.cancelTitle
context.touchIDAuthenticationAllowableReuseDuration = 0
let allowDeviceCredential = args.allowDeviceCredential ?? false
// force system default fallback title if an empty string is provided (the OS hides the fallback button in this case)
if allowDeviceCredential,
let fallbackTitle = context.localizedFallbackTitle,