あなたは、登録時にキーチェーンへの電子メールを保存するためにkSecAccessControlTouchIDCurrentSet
を使用することができます。これにより、キーチェーンに保存するアイテムはCurrent TouchID + Email
の組み合わせになります。ログイン時に、touchIdを使用してKeychainから電子メールを取得し、入力した電子メールと比較することができます。キーチェーンに電子メールを保存するために
、次のコードを使用:
:(iOS版9上で動作し、above--はiOSの8では動作しません)
-(void)saveToKeyChain:(NSString*)email{
CFErrorRef error = NULL;
SecAccessControlRef scaObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, kSecAccessControlTouchIDCurrentSet, &error);
NSDictionary *attributes = @{
(__bridge id)kSecClass:(__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService :@"ToucIdWithEmailExample",
(__bridge id)kSecValueData :[email dataUsingEncoding:NSUTF8StringEncoding],
(__bridge id)kSecUseNoAuthenticationUI :@YES,
(__bridge id)kSecAttrAccessControl : (__bridge_transfer id)scaObject
};
OSStatus initialWriteStatus = SecItemAdd((__bridge CFDictionaryRef)attributes, nil);
}
kSecAccessControlTouchIDCurrentSet in above will take store Email with current authenticated touch.
キーチェーンデータをretriveするには、次のように使用することができます
-(void)retriveKeyChainData{
NSDictionary *querryAttributes = @{
(__bridge id)kSecClass:(__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService :@"ToucIdWithEmailExample",
(__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);
}
}
この関数は、登録時に保存したメールIDを取得します。入力した電子メールと比較して検証することができます。
この詳細は、tutorialをご覧ください。
タッチID接続をメールにリンクしたいのですが(タッチIDがパスワードのように)、ログオンする必要はありません(メール+パスワード)+タッチIDですか? – Makaille
yes touchIdが私のパスワードである – CodeChanger
タッチIDが成功または失敗を返すことはできません。だからあなたは電子メールでそれを束縛することはできません。 @CodeChanger – KAR