iOSアプリケーションが基本認証を使用してローカルApacheサーバーからファイルにアクセスしようとしています。ブラウザからすべて正常に動作し、制限されたフォルダ内の画像にアクセスするにはユーザー名とパスワードを入力する必要があります。しかし、アプリでいくつかの奇妙なことが起こっている。iOSが基本的なサーバー認証をバイパスしているようです
NSURLConnectionをサーバーに作成します(これは問題なく動作しています)。私の要求が初めてデリゲートメソッド- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
が呼び出されたときに発生します。テスト目的のために、私は空のNSURLCredential
で応答し、明らかに接続が失敗します。しかし、私が再度リクエストを行うと、デリゲートメソッドは呼び出されず、何らかの方法でイメージがダウンロードされ、認証なしで表示されます。私は本当に何が起こっているのか混乱しています!
- (IBAction)loginPressed
{
self.username = self.usernameField.text;
self.password = self.passwordField.text;
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://192.168.0.2/secret/favicon.ico"]];
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
}
- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)data
{
[self.data appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
self.imageView.image = [UIImage imageWithData:self.data];
self.errorLabel.text = @"";
}
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount] == 0) {
NSURLCredential *newCredential = [NSURLCredential credentialWithUser:self.username password:self.password persistence:NSURLCredentialPersistenceNone];
[challenge.sender useCredential:newCredential forAuthenticationChallenge:challenge];
} else {
[challenge.sender cancelAuthenticationChallenge:challenge];
self.errorLabel.text = @"Invalid Username and/or Password";
self.imageView.image = [UIImage imageWithData:[[NSData alloc] init]];
}
}
コードを追加してください。 –
これはかなり多くのコードが使用されています。私はログインボタンを使ってリクエストを送信しています。テキストフィールドを空白のままにすると、上記の結果が得られます。 –
ところで、コードの最後の行が漏れています。 NSDataインスタンスを解放せずに作成しています。それ以外に、imageViewイメージを 'nil'に割り当てることができます。 –