本地身份验证问题

Posted

技术标签:

【中文标题】本地身份验证问题【英文标题】:LocalAuthentication issue 【发布时间】:2019-05-08 08:26:37 【问题描述】:

我有一个应用程序,用户可以使用TouchID / FaceID(如果可用,已注册并启用)或密码进行身份验证。所有这些选项都可以在应用程序的设置中设置并存储在UserDefaults。应用加载后,它会检查这些 Bool 键在 UserDefaults 中是否具有真实值并采取相应措施。

当用户的设备带有 TouchID/FaceID 但他们尚未启用和注册时,我的问题就出现了。在这种情况下,应用程序应仅显示密码屏幕。但是,当我禁用该选项(出于测试目的)时,我在 iPhone 上由TouchID 呈现。根据 Apple 的文档,它说:

如果 Touch ID 或 Face ID 可用、已注册且未禁用,则首先会要求用户提供该信息。否则,系统会要求他们输入设备密码。

在模拟器上,我看到密码屏幕,但在我的 iPhone 上,我看到 TouchID 在禁用时弹出,UserDefaults 为该密钥返回 false。为什么会这样?我做错了什么?

override func viewDidLoad() 
   super.viewDidLoad()
   setUI()


 func setUI() 
    let faceTouchIdState = UserDefaults.standard.bool(forKey: DefaultsKeys.faceTouchIdState)
    let passcodeState    = UserDefaults.standard.bool(forKey: DefaultsKeys.passcodeState)

    if faceTouchIdState 
       print("Authenticate")
       authenticate()
    
    else 
       print("Passscode")
       showEnterPasscode()
    


func showEnterPasscode() 
    let context = LAContext()
    var errMess: NSError?
    let policy = LAPolicy.deviceOwnerAuthentication

    if context.canEvaluatePolicy(policy, error: &errMess) 
        context.evaluatePolicy(policy, localizedReason: "Please authenticate to unlock the app.")  [unowned self] (success, err) in
        DispatchQueue.main.async 
            if success && err == nil 
               self.performSegue(withIdentifier: "GoToTabbar", sender: nil)
            
            else 
                 print(err?.localizedDescription)
            
           
        
    
    else 
        print("cannot evaluate")
    

【问题讨论】:

你是如何关闭手机中的生物识别功能的? 根据我在这里看到的内容,您的代码没有问题 【参考方案1】:

您的代码没有任何问题。我认为问题在于您如何做到这一点“我已禁用该选项(出于测试目的)”。

由于系统提示您弹出“Touch ID”,这证明您的生物识别功能并未真正被禁用。我推测您切换了“使用触控 ID”开关之一,并认为这样做会在您的应用中禁用生物识别功能,但它不会。

如果您想在您的设备中测试回退到密码:

尝试取消注册所有指纹

通过输入未注册的指纹禁用您的指纹 您的应用多次。

【讨论】:

哦,我不知道。您对我切换“使用触摸 ID”的假设是正确的。我会测试你的建议。谢谢,很有帮助 不客气。如果您最终解决了,请在此处评论。谢谢 我刚刚删除了所有指纹并再次测试,现在它显示了密码屏幕。你确实是对的。这就是问题所在。关闭 TouchID 当然并不意味着它像我想的那样被禁用。再次感谢您。

以上是关于本地身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章

Kestrel 上的 Blazor Windows 身份验证仅在本地工作?在身份验证握手请求之间收到匿名请求

节点护照错误:未知身份验证策略“本地登录”

本地护照和本地护照猫鼬的身份验证错误

身份验证令牌、本地存储和流星

本地移动应用程序身份验证方法的最佳方法

如何在 MVC 5 中设置本地授权身份验证?