Mysql
 sql >> Base de données >  >> RDS >> Mysql

XCode, Authentification et NSUserDefaults

Vous êtes assez proche de votre pensée. J'utilise une approche très similaire pour mon processus de connexion utilisateur.

Je sale et hache actuellement l'e-mail et le mot de passe en un jeton de 1 40 caractères. Si la connexion est réussie, j'enregistre le jeton dans NSUserDefaults. J'utilise ce jeton pour toutes les autres requêtes Web jusqu'à ce que l'utilisateur se déconnecte, moment auquel je supprime les valeurs par défaut de l'utilisateur.

Voici quelques extraits que j'utilise pour le même processus :

// see if a login already exists
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.token = [defaults stringForKey:@"token"];

// if the token is nil/blank, launch login view
if(self.token == nil || [self.token isEqualToString:@""]) {
    [self loadStartView];
    return;
}

// build the request to update status
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];
NSString *stringData = [NSString stringWithFormat:@"<your api string here"];
NSString *requestData = stringData;
NSData *myRequestData = [NSData dataWithBytes: [requestData UTF8String] length: [requestData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:[NSString  stringWithFormat:@"<your url request here>"]]];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: myRequestData];
NSData *jsonData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
NSString *json = [[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding] autorelease];
NSDictionary *payloadData = [json JSONValue];

[request release];

if([[payloadData objectForKey:@"success"] boolValue]) { // this is designed around my api, but you get the idea
    //NSLog(@"updateStatus: %@", payloadData);
    // updates the api version for every call
    [defaults setObject:self.token forKey:@"token"];
}