2009-02-07 2 views
25

Ho una semplice applicazione, basata sul modello "Utility Application". Recupera un file XML protetto da password (tramite NSXMLParser).Memorizzazione di password nelle applicazioni iPhone

Desidero consentire all'utente di impostare un nome utente e una password in "FlipsideView", come dovrei farlo?

ho le basi in luogo, le due caselle UITextField, il cui valore viene impostato un valore fisso al caricamento vista (utilizzando il metodo viewWillAppear), e NSLog'd quando la vista è chiusa (la NSLog è solo per il test, ovviamente, nel metodo viewWillDisappear)

Come si memorizzano i dati? Ho dato un'occhiata alla documentazione dello sviluppatore e sembra che dovrei usare NSUserDefaults ..?

risposta

33

Sono d'accordo con Ben. Questo è esattamente a cosa serve il portachiavi.

Non vorrei, in nessun caso, archiviare semplicemente le password nelle impostazioni predefinite come suggerito da dbr. Questo è altamente insicuro. Stai essenzialmente memorizzando le tue password allo scoperto.

Oltre al codice di esempio di Apple, vi consiglio anche il codice portachiavi di Buzz Anderson: iPhone Keychain Code

+0

Perfetto, grazie! Una cosa sottolineata nei commenti di quella pagina (che ha causato l'errore durante la compilazione), devi includere l'iPhoneOS Security.framework per farlo funzionare. – dbr

+0

Questo ha perfettamente senso per la memorizzazione della password, ma per quanto riguarda la memorizzazione del nome utente (per recuperare la password)? Qualcosa che non verrà sovrascritto sugli aggiornamenti delle app, ecc. Sembra inutile archiviarli negli userdefaults se è l'unica cosa lì. –

4

Aha, NSUserDefaults sembra funzionare, ed è semplice da usare, ma non sono al sicuro il minimo:

password è l'IBOutlet per l'UITextField.

- (void)viewWillAppear:(BOOL)animated 
{ 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSString *pword = [prefs objectForKey:@"password"]; 
    password.text = uname; 
} 

- (void)viewWillDisappear:(BOOL)animated{ 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    [prefs setObject:password.text forKey:@"password"]; 
} 

La password è memorizzata in testo semplice in un plist, quindi sarebbe abbastanza facile per qualcun altro di accesso .. ma questo è utile per memorizzare le impostazioni non sensibili.

Ho finito per utilizzare questo per memorizzare il campo nome utente e memorizzato la password utilizzando il SFHFKeychainUtils keychain code dalla risposta di agosto.

+3

Questo è molto insicuro. Stai essenzialmente memorizzando le password allo scoperto. – August

+0

Yeh, ho completamente dimenticato il portachiavi .. Ho aggiornato la risposta per ribadire quanto sia insicuro – dbr

9

Questo è esattamente ciò per cui Apple ha sviluppato il portachiavi. Utilizzando Keychain, è possibile memorizzare la password in forma crittografata. Dai uno sguardo al campione GenericKeychain di Apple.