2016-08-08 19 views
1

いくつかの基本情報を保存したいと思います。iOSのユーザーに関する情報を保存する

私は一般的に保存したい情報がある:

username 
identityId (unique user identityid for amazon users) 
some other basic user details 
email (but no passwords stored) 

私はNSUserDefaultsを使用すると、ハッキングや見やすいですし、このようなユーザ名の一部を格納し、identityIdが十分ではないことをお読みください。コアデータなどを使用する必要がありますか?コアデータを暗号化する必要はありますか?データは超高感度ではありませんが、私はまだ注意の面で放映したいと思います。これは、技術的には、ログインしたユーザーのデータの1つであり、ユーザーがログアウトするとクリアされます。

1つのレコードのコアデータファイルに関する簡単なチュートリアルは素晴らしいものです。

+0

ログイン情報のように、一つだけのユーザに関する機密データを保存している場合は、キーチェーンを使用する必要があります。 – Larme

答えて

0

使用キーチェーンは、この種のデータ格納する:

import UIKit 
import Security 

// Identifiers 
let serviceIdentifier = "MySerivice" 
let userAccount = "authenticatedUser" 
let accessGroup = "MySerivice" 

// Arguments for the keychain queries 
let kSecClassValue = kSecClass.takeRetainedValue() as NSString 
let kSecAttrAccountValue = kSecAttrAccount.takeRetainedValue() as NSString 
let kSecValueDataValue = kSecValueData.takeRetainedValue() as NSString 
let kSecClassGenericPasswordValue = kSecClassGenericPassword.takeRetainedValue() as NSString 
let kSecAttrServiceValue = kSecAttrService.takeRetainedValue() as NSString 
let kSecMatchLimitValue = kSecMatchLimit.takeRetainedValue() as NSString 
let kSecReturnDataValue = kSecReturnData.takeRetainedValue() as NSString 
let kSecMatchLimitOneValue = kSecMatchLimitOne.takeRetainedValue() as NSString 

class KeychainService: NSObject { 

    /** 
    * Exposed methods to perform queries. 
    * Note: feel free to play around with the arguments 
    * for these if you want to be able to customise the 
    * service identifier, user accounts, access groups, etc. 
    */ 
    public class func saveToken(token: NSString) { 
    self.save(serviceIdentifier, data: token) 
    } 

    public class func loadToken() -> NSString? { 
    var token = self.load(serviceIdentifier) 

    return token 
    } 

    /** 
    * Internal methods for querying the keychain. 
    */ 
    private class func save(service: NSString, data: NSString) { 
    var dataFromString: NSData = data.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 

    // Instantiate a new default keychain query 
    var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, userAccount, dataFromString], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue, kSecValueDataValue]) 

    // Delete any existing items 
    SecItemDelete(keychainQuery as CFDictionaryRef) 

    // Add the new keychain item 
    var status: OSStatus = SecItemAdd(keychainQuery as CFDictionaryRef, nil) 
    } 

    private class func load(service: NSString) -> NSString? { 
    // Instantiate a new default keychain query 
    // Tell the query to return a result 
    // Limit our results to one item 
    var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, userAccount, kCFBooleanTrue, kSecMatchLimitOneValue], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue, kSecReturnDataValue, kSecMatchLimitValue]) 

    var dataTypeRef :Unmanaged<AnyObject>? 

    // Search for the keychain items 
    let status: OSStatus = SecItemCopyMatching(keychainQuery, &dataTypeRef) 

    let opaque = dataTypeRef?.toOpaque() 

    var contentsOfKeychain: NSString? 

    if let op = opaque? { 
     let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue() 

     // Convert the data retrieved from the keychain into a string 
     contentsOfKeychain = NSString(data: retrievedData, encoding: NSUTF8StringEncoding) 
    } else { 
     println("Nothing was retrieved from the keychain. Status code \(status)") 
    } 

    return contentsOfKeychain 
    } 
} 

使用を

KeychainService.saveToken("token") 
KeychainService.loadToken() 

(サンプルコードから:http://matthewpalmer.net/blog/2014/06/21/example-ios-keychain-swift-save-query/

または "錠前" を使用し、多くのよりクリーナーで簡単です。

https://github.com/matthewpalmer/Locksmith

+0

これは私のアプリがまだそれから転送されていないので、これをobjective-cに転送する必要があります。 – cdub

0

あなたはMd5 +塩を考慮に入れてNSUserDefaultに保存することができます。

0

あなたは2つの形式でデータを格納することができます

  1. コアデータ:そうハッカーはアプリ(ユーザー)情報を抽出する必要がある場合。彼はcoredataベースのSQLファイルを抽出するためにユーザデバイスを必要とします。その暗号化されたフォームを理解可能な形式に変換する必要があります。

  2. ここでできることは2番目です。 app(ユーザー)情報を保存するapiを作成することができます。ユーザーデータを抽出する必要があるたびに、viewdidloadでサービスにアクセスできます。

(NJ)

関連する問題