2016-12-08 13 views
5

Uygulamamda bir kullanıcı e-posta/parola kullanarak arka uçuma kimlik doğrulayabilir/giriş yapabilir. Şimdi de dokunmatik kimliğin uygulanmasını düşünüyorum.Swift ios dokunmatik kimlik giriş akışı

Ancak bir giriş kimliği kullanarak giriş akışı hakkında kafam karıştı.

Ben kolay bir kullanıcı kimliğini doğrulayabilir feryat kodunu kullanarak:

func authenticateUser() { 
    let context = LAContext() 
    var error: NSError? 

    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) { 
     let reason = "Identify yourself!" 

     context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) { 
      [unowned self] success, authenticationError in 

      DispatchQueue.main.async { 
       if success { 
        self.runSecretCode() 
       } else { 
        let ac = UIAlertController(title: "Authentication failed", message: "Sorry!", preferredStyle: .alert) 
        ac.addAction(UIAlertAction(title: "OK", style: .default)) 
        self.present(ac, animated: true) 
       } 
      } 
     } 
    } else { 
     let ac = UIAlertController(title: "Touch ID not available", message: "Your device is not configured for Touch ID.", preferredStyle: .alert) 
     ac.addAction(UIAlertAction(title: "OK", style: .default)) 
     present(ac, animated: true) 
    } 
} 

Ama hangi kullanıcı bilmiyorum.

Yani, bir kullanıcı bir hesap oluşturduğunda, DB'mde aygıt kimliği (varsa) gibi bir şey saklamalıyım, sonra kullanıcılar dokunmatik kimliğe bastığında, hangi aygıt kimliğini kontrol ettiğimi daha sonra oturum açabiliyor muyum?

cevap

-2

Dokunma kimliğinden kullanıcı ayrıntısını alamıyor olmanız doğrudur. Ancak e-posta ve parola değerlerinizi saklamak ve korumak için KeyChainTouchID'u kullanabilirsiniz. Bunu cihaz kimliği olmadan yapabilirsiniz. iOS 9'dan, anahtarlık verileri daha güvenlidir ve güncel kullanıcılarla detay depolayan kSecAccessControlTouchIDCurrentSet (Touch ile kimliği doğrulanmış.)

sizden bu konuda daha fazla bilgi bulabilirsiniz here

Mağaza kullanıcı kimliği birincisi için kullanıcı giriş Anahtarlık için Anahtarlık içinde. Anahtarlık verileri saklamak için

kodu: kullanıcı girişi Dokunarak ile kimlik doğrulaması seçeneği sağlar

-(void)saveToKeyChain:(NSString*)userid{ 
    CFErrorRef error = NULL; 

    SecAccessControlRef scaObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, kSecAccessControlTouchIDCurrentSet,   &error); 

    NSDictionary *attributes = @{ 
           (__bridge id)kSecClass:(__bridge id)kSecClassGenericPassword, 
           (__bridge id)kSecAttrService :@"ToucIdloginExample", 
            (__bridge id)kSecValueData :[userid dataUsingEncoding:NSUTF8StringEncoding], 
            (__bridge id)kSecUseNoAuthenticationUI :@YES, 

            (__bridge id)kSecAttrAccessControl : (__bridge_transfer id)scaObject 
           }; 

    OSStatus initialWriteStatus = SecItemAdd((__bridge CFDictionaryRef)attributes, nil); 

} 

dahaki sefere. Dokunma işlemini onayladıktan sonra, anahtarlıktaki kayıtlı kullanıcı için değeri alın ve gerekirse sunucuyla kimlik doğrulayın. (Void) retriveKeyChainData {

NSDictionary *querryAttributes = @{ 
          (__bridge id)kSecClass:(__bridge id)kSecClassGenericPassword, 
          (__bridge id)kSecAttrService :@"ToucIdloginExample", 
          (__bridge id)kSecReturnData : @YES, 

          (__bridge id)kSecUseOperationPrompt : @"Authenticate" 
          }.mutableCopy; 

CFTypeRef dataTypeRef = NULL; 
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)querryAttributes, &dataTypeRef); 


if(status == errSecSuccess) 
{ 
    NSData *data = (__bridge NSData*)(dataTypeRef); 
} 

}

-

:

kod anahtarlık veri almak için