0

パスワードが追加されたWebサービスのURLがあります。正しいパスワードを指定してアプリケーションを実行すると、アプリケーションが実行され、同時に間違った資格情報でアプリを実行します。アプリは実行中ですが、この問題を解決する方法は思いつきませんでした。私のコードはここにあります:

     NSString *post =[[NSString alloc] initWithFormat:@"password=%@",[password text]];
        NSLog(@"PostData: %@",post);
        NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://myexample.com/Accountservice/Secure/ValidateAccess?password=abcd&type=1"]];

        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
        NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
        [request setURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
        [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];

        NSURLRequest *request1 = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:post] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];

        NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request1 delegate:self startImmediately:YES];
        if(!connection){
            NSLog(@"connection failed");
        }
        else{
            NSLog(@"connection succeeded");
        }

パスワードとして「abcd」を指定すると、接続が正常に表示されます。間違ったパスワードを入力した場合、正常に接続が表示されます。どうすれば問題を解決できますか? 間違ったパスワードを入力した場合は、アラートを表示する必要があります。

4

2 に答える 2

1

ここでのこの制御構造が問題です。

if(!connection){
    NSLog(@"connection failed");
}
else {
    NSLog(@"connection succeeded");
}

これは接続不良をチェックするのではなく、接続オブジェクトが 0 (nil) に等しいかどうかをチェックします。明らかに、上記の行で初期化すると、else ステートメントは常にログに記録され、接続が成功したという誤った印象を与えます。接続のデリゲートになり、代わりに適切なデリゲート メソッドに応答する必要があります。

于 2013-03-12T05:13:14.000 に答える
0

問題は、使用している URL にある可能性があります

  1. ブラウザで URL を起動し、返される内容を確認します
  2. 一重引用符 accesscode='abcd' で URL パラメータを追加してみてください

この方法で資格情報を渡すことはお勧めできません。発生する可能性のあるセキュリティの問題を防ぐために、有効な暗号化で POST メソッドを使用できます

解決策 これを試してください

  NSString *urlString=@"http://myexample.com/Accountservice/Secure/ValidateAccess?";
    self.responseData = [NSMutableData data];
    NSString *post =[NSString stringWithFormat:@"username=%@&password=%@",userNameTextField.text,passwordTextField.text];
    NSData *postData=[post dataUsingEncoding:NSUTF8StringEncoding];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];
    NSURLConnection *connection0= [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [connection0 start];
于 2013-03-12T05:15:21.770 に答える