2011-05-12 15 views
5

Mi aplicación (como la mayoría) va a aprovechar muchos servicios remotos ... así que cuando un usuario se autentica, necesito almacenar su nombre de usuario y contraseña (o algún tipo de indicador) para que no tengan que autenticarse en toda la aplicación.iPhone: ¿Guarda datos de usuario en plist, SQLite o cookie?

¿Dónde está el mejor/más rápido/el lugar más fácil para almacenar esta información de usuario?

Respuesta

11

todavía puede almacenar el nombre de usuario y la dirección URL del servidor con NSUserDefaults, pero los servicios de llavero es la mejor idea si usted está almacenando una contraseña. Es parte del marco de seguridad basado en C, y hay una gran clase de contenedor SFHFKeychainUtils, para darle una API Objective-C.

Para guardar:

NSString *username = @"myname"; 
NSString *password = @"mypassword"; 
NSURL *serverURL = [NSURL URLWithString:@"http://www.google.com"]; 

[SFHFKeychainUtils storeUsername:username andPassword:password forServiceName:[serverURL absoluteString] updateExisting:YES error:&error] 

Para restaurar:

NSString *passwordFromKeychain = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:[serverURL absoluteString] error:&error]; 
+0

Tengo un proyecto que comparte una biblioteca común entre OSX e iOS. Mi administración de inicio de sesión está contenida principalmente en esa biblioteca compartida. Eliminé #import del archivo de encabezado, y esto compila bien tanto para OSX como para iOS. ** Todavía no he probado el cliente OSX. +1 para código reutilizable. –

8

NSUserDefaults

Guardar como esto:

[[NSUserDefaults standardUserDefaults] setObject:username forKey:@"username"]; 
[[NSUserDefaults standardUserDefaults] setObject:password forKey:@"password"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Fetch así:

NSString *username = [[NSUserDefaults standardUserDefaults] stringForKey:@"username"]; 
    NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"]; 
+0

Y es este un objeto de aplicación automática que fue diseñado para este propósito exacto? – dcolumbus

+0

Sí, los NSUserDefaults son para almacenar valores únicos relacionados con el usuario. – Rayfleck

+0

¡Agradable! ¡Muchas gracias! – dcolumbus

5

El almacenamiento seguro de datos en un archivo insegura (por defecto el usuario) no suele ser una buena idea. Mire en los servicios de Keychain, que encripta la información de inicio de sesión sensible y tal.

http://developer.apple.com/library/mac/#documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html

+0

¡Acabo de leer esto en la Ayuda y parece lo que necesito! Supongo que, junto con una contraseña, también puede almacenar otros tipos de información dentro del llavero. – dcolumbus

+0

No lo he usado mucho, así que no puedo darle una respuesta definitiva, pero estoy bastante seguro de que puede almacenar cierta información de usuario junto con los datos de autenticación. Si está buscando un ejemplo, [consulte el proyecto de ejemplo de la documentación aquí] (http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html). –

Cuestiones relacionadas