Swift & Passcode Authentication : 如何将认证次数限制为一次

问题描述

我的主要目标是在我的 React Native 项目中连接 swift。但让我们专注于 Swift。 我想从swift获取本地密码认证结果。

密码认证 至于密码,我可以返回结果。但是有 3 个问题。

  • 用户可以多次输入他们的密码(直到密码被阻止)。而且我希望他们能够只做一次然后得到结果。
  • 我无法确定用户是否在我的代码中输入了错误的密码,我只能在用户取消时返回 false。换句话说,我想在用户输入错误密码后立即关闭密码并将其返回为 false。
  • let insertStatus = SecItemAdd(insertQuery as CFDictionary,nil) 有什么用?有必要吗?

代码{

func passcodeAuthentication() -> Bool {
    let reason = "Input your passcode to authenticate"
    
    let secAccessControlbject: SecAccessControl = SecAccessControlCreateWithFlags(
        kcfAllocatorDefault,kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,.devicePasscode,nil
    )!
    let dataToStore = "AnyData".data(using: .utf8)!
    
    
    let insertQuery: NSDictionary = [
        kSecclass: kSecclassGenericPassword,kSecAttrAccessControl: secAccessControlbject,kSecAttrService: "PasscodeAuthentication",kSecValueData: dataToStore as Any,]
    
    let insertStatus = SecItemAdd(insertQuery as CFDictionary,nil)
    
    
    let query: NSDictionary = [
        kSecclass:  kSecclassGenericPassword,kSecAttrService  : "PasscodeAuthentication",kSecUSEOperationPrompt : reason
    ]
    
    var typeRef : CFTypeRef?
    
    let status: Osstatus = SecItemcopyMatching(query,&typeRef) //This will prompt the passcode.
    
    // Check authentication status
    if (status == errSecSuccess)
    {
        print("Authentication Succeeeded")
        return  true
    } else if status == errSecUserCanceled {
        print("errSecUserCanceled")
        return false
    } else if status == errSecInvalidAuthorityKeyID {
        print("errSecInvalidAuthorityKeyID")
        return false
    } else if status == errSecAuthFailed {
        print("errSecAuthFailed")
        return false
    } else {
        print("Other Failed")
        return false
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)