NSURLRequest身份验证无效

时间:2011-03-03 18:33:07

标签: iphone authentication nsurl

好的,所以我创建了一个NSLURLRequest,它应该从服务器获取一个字符串并将其带回程序中。根据返回的字符串,程序应该转换到不同的视图。出于某种原因,即使控制台返回正确的字符串,也不会执行条件语句中的方法。这是我的代码:

#import "login.h"


@implementation login

@synthesize viewController;
@synthesize viewControllerTwo;
@synthesize userName;
@synthesize passWord;
@synthesize verified;
@synthesize receivedData;
@synthesize requestType;

/*
 // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
    // Custom initialization
}
return self;
}
*/

-(IBAction)login{
 [self performSelector:@selector(getAuthentication) withObject:nil afterDelay:0.5];
 //[self performSelector:@selector(authenticate) withObject:nil afterDelay:5.0];
}

-(void)authenticate{
NSString *good = @"Done";
NSLog(@"%@", good);
  if(verified == good){
            [self performSelector:@selector(changeViewAdmin) withObject:nil afterDelay:1.0];
        }
        if(verified == @"user"){
            [self performSelector:@selector(changeView) withObject:nil afterDelay:1.0];
        }
        if(verified == @"No"){
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
    message:@"Invalid UserName/Password combination!"
    delegate:self
    cancelButtonTitle:@"Okay"
    otherButtonTitles:nil];
    [alert show];
    [alert release];
        }
    }

-(void)getAuthentication{
requestType = 1;
NSMutableString *urlWithParameters = [NSMutableString stringWithString:kLoginURL];

[urlWithParameters appendFormat:@"?userName=%@&passWord=%@", userName.text, passWord.text];

NSURLRequest *req = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:urlWithParameters]];

//NSLog(@"%@", req);

 NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:req delegate:self];
   if(theConnection){
    NSMutableData *data = [[NSMutableData alloc] init];
    self.receivedData = data;
    [data release];
  }
[userName resignFirstResponder];
[passWord resignFirstResponder];
[req release];
}

-(void)changeView{
    CATransition *transition = [CATransition animation];
    transition.duration = 0.5;
    transition.timingFunction = [CAMediaTimingFunction 
                                 functionWithName:kCAMediaTimingFunctionEaseOut];
    transition.delegate = self;

    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromRight;

    [self.view.layer addAnimation:transition forKey:@"transition3"];
    viewController = [[MapMeViewController alloc] initWithNibName:@"MapMeViewController" bundle:[NSBundle mainBundle]];
    [self.view addSubview:viewController.view];
}

-(void)changeViewAdmin{
    CATransition *transition = [CATransition animation];
    transition.duration = 0.5;
    transition.timingFunction = [CAMediaTimingFunction 
                                 functionWithName:kCAMediaTimingFunctionEaseOut];
    transition.delegate = self;

    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromRight;

    [self.view.layer addAnimation:transition forKey:@"transition3"];
    viewControllerTwo = [[AdminPanel alloc] initWithNibName:@"AdminPanel" bundle:[NSBundle mainBundle]];
    [self.view addSubview:viewControllerTwo.view];
}


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
}


/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [viewController release];
    [viewControllerTwo release];
    [userName release];
    [passWord release];
    [verified release];
    [receivedData release];
    [super dealloc];
}

#pragma mark -
#pragma mark NSURLConnection Callbacks
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
[receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[receivedData appendData:data];
}

- (void)connection:(NSURLConnection *)connection 
  didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
  /*// Access has failed two times...
  if ([challenge previousFailureCount] > 1)
  {
    [kFormURL release];


UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Authentication Error"
                                 message:@"Too many unsuccessul login attempts." 
                                 delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

[alert show];
[alert release];
  }
  else 
  {*/
    // Answer the challenge
    NSURLCredential *cred = [[[NSURLCredential alloc] initWithUser:@"//rightusername" password:@"//rightpassword"
       persistence:NSURLCredentialPersistenceForSession] autorelease];
    [[challenge sender] useCredential:cred forAuthenticationChallenge:challenge];
  //}
    }

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
[connection release];
self.receivedData = nil;

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:[NSString stringWithFormat:@"Connection failed! Error - %@ (URL: %@)",[error localizedDescription], [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]]
delegate:self
cancelButtonTitle:@"Bummer"
otherButtonTitles:nil];
[alert show];
[alert release];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSString *payloadAsString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
verified = payloadAsString;
[payloadAsString release];
 NSLog(@"%@", verified);
  if(verified == @"Done"){
        [self performSelector:@selector(changeViewAdmin) withObject:nil afterDelay:1.0];
    }
//[payloadAsString release];
//NSLog(@"%@", verified);
//  INSERT GOOGLE MAPS URL REQUEST HERE
/*if(requestType == 1){
NSString* addressText = payloadAsString;
// URL encode the spaces
addressText =  [addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];  
NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
// lets throw this text on the log so we can view the url in the event we have an issue
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
// */
//
//}
[connection release];
self.receivedData = nil;
}


@end

1 个答案:

答案 0 :(得分:3)

哎呀,不,不,不,......

if ( verified == @"Done" )

...你在这里比较指针而不是verified变量内容。你应该使用:

if ( [verified isEqualToString:@"Done"] )

阅读此https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html%23//apple_ref/doc/uid/20000154-SW29

P.S。格式化你的帖子,这是不可读的...我必须编辑它...