ASIFormDataRequestを使用してhttp認証済みURLにデータを投稿しています。
認証が失敗し、認証ダイアログデリゲートが呼び出された場合でも、アップロードの進行状況は完全に進行しているように見えます。
したがって、これらの場合:
1)ユーザーのクレデンシャルはまだキーチェーンに保存されていません2)キーチェーンに保存されているユーザーのクレデンシャルは認証に失敗します(期限切れなど)
私はこの振る舞いを見ます:
- リクエストがサーバーに届き、401拒否エラーがクライアントに返されるのがわかります
- uploadFailedデリゲートは呼び出されません。
- ファイルがまだネットワーク接続にプッシュされているように見えるため、プログレスバーデリゲートがゆっくりといっぱいになります。完全にアップロードする時間と一致する時間で完了します
- 組み込みの認証ダイアログモーダルが表示されます
- ユーザーが正しいクレデンシャルを入力します
- プログレスバーデリゲートのリセット
- アップロードが再開されます-投稿データがサーバーで受信されると、プログレスバーがいっぱいになります
- 終了したデリゲートメソッドが期待どおりに呼び出されます。
- この2回目の試行で、すべてが正常にアップロードされました
これが私の操作をセットアップする場所です:
[self setRequest:[ASIFormDataRequest requestWithURL:uploadURL]];
[request setDelegate:self];
[request setDidFailSelector:@selector(uploadFailed:)];
[request setDidFinishSelector:@selector(uploadFinished:)];
[request setUseKeychainPersistence:TRUE];
[request setShouldPresentAuthenticationDialog:TRUE];
[request setShouldPresentCredentialsBeforeChallenge:TRUE];
[request setPostValue:captionTextField.text forKey:@"caption"];
[request setPostValue:[siteID stringValue] forKey:@"site_id"];
[request setFile:fileToUpload forKey:@"site_photo"];
[request setUploadProgressDelegate:progressView];
[request startAsynchronous];
認証に失敗したら[リクエストキャンセル]を発行する必要があると思いますが、どこでやればいいのかわかりません。
サーバーが401を返した後でも、POSTがチャグアウトすることが予想される動作ですか?
これに対処する既存の質問へのガイダンスまたはポインタに感謝します。