Mysql
 sql >> Datenbank >  >> RDS >> Mysql

XCode, Authentifizierung und NSUserDefaults

Du bist ziemlich nah dran mit deiner Denkweise. Ich verwende einen sehr ähnlichen Ansatz wie bei meinem Benutzer-Anmeldeprozess.

Ich salze und hash derzeit die E-Mail und das Passwort in 1 40-Zeichen-Token. Wenn die Anmeldung erfolgreich zurückkehrt, speichere ich das Token in NSUserDefaults. Ich verwende dieses Token für alle weiteren Webanfragen, bis sich der Benutzer abmeldet. Zu diesem Zeitpunkt lösche ich die Benutzervorgaben.

Hier sind ein paar Ausschnitte, die ich für denselben Prozess verwende:

// 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"];
}