2016-12-08 6 views
5

मेरे ऐप में कोई उपयोगकर्ता ईमेल/पासवर्ड का उपयोग करके मेरे बैकएंड को प्रमाणित/लॉगिन कर सकता है। अब मैं टच आईडी को लागू करने की सोच रहा हूं।स्विफ्ट आईओएस टच आईडी लॉगिन प्रवाह

लेकिन मैं एक स्पर्श आईडी का उपयोग कर लॉग इन प्रवाह के बारे में उलझन में हूँ।

कोड का उपयोग करना मैं आसान एक उपयोगकर्ता को प्रमाणित कर सकते हैं bellow:

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) 
    } 
} 

लेकिन मैं जानता हूँ कि जो उपयोगकर्ता यह है नहीं है।

तो, जब कोई उपयोगकर्ता खाता बनाता है, तो क्या मुझे अपने डीबी में डिवाइस आईडी (यदि मौजूद है) जैसे कुछ स्टोर करना चाहिए, तो जब उपयोगकर्ता टच आईडी का उपयोग करते हैं तो मैं जांच सकता हूं कि यह कौन सा डिवाइस आईडी है, फिर उपयोगकर्ता को लॉग इन करें?

उत्तर

-2

इसकी सही नहीं कर सकते कि आप टच आईडी से उपयोगकर्ता विवरण प्राप्त लेकिन आप की दुकान और अपने ईमेल और पासवर्ड मूल्य की रक्षा के लिए KeyChainTouchID उपयोग कर सकते हैं। आप डिवाइस आईडी के बिना ऐसा कर सकते हैं। आईओएस 9 से, कीचेन डेटा अधिक सुरक्षित हैं और मौजूदा उपयोगकर्ताओं के साथ विस्तार से संग्रहीत करता kSecAccessControlTouchIDCurrentSet (टच के साथ प्रमाणीकृत।)

आप से इसके बारे में और अधिक पढ़ सकते here

स्टोर उपयोगकर्ता के आईडी पहले के लिए जब उपयोगकर्ता लॉगिन कीचेन पर कीचेन में चेन में डेटा संग्रहीत करने के लिए

कोड:

-(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); 

} 

अगली बार जब उपयोगकर्ता लॉगिन, टच के साथ प्रमाणित करने का विकल्प प्रदान करते हैं। स्पर्श को सत्यापित करने के बाद, कुंजीचैन से संग्रहीत उपयोगकर्ता आईडी के लिए मान प्राप्त करें और यदि आवश्यक हो तो सर्वर के साथ प्रमाणित करें। (शून्य) 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); 
} 

}

-

:

कोड कीचेन से डेटा पुनः प्राप्त करने

संबंधित मुद्दे