1

ASIHTTPRequest を使用して、iPhone アプリを Rails サーバーと通信させています。(おそらく ASIHTTPRequest を使用すべきではなかったことはわかっていますが、今ではかなり投資しており、ほとんどの場合に機能します)。

アプリが起動したら、JSON ファイルを要求するリクエストをサーバーに送信します。以前にログイン資格情報を保存しているかどうかを確認し、それらを使用しているかどうかを確認するために、ASIHTTPRequest を頼りにしています。そうでない場合、リクエストのデリゲートは authenticationNeededForRequest: を実装します。これは、独自のカスタム ログイン ダイアログを表示します。

要求に以前に資格情報が保存されていない場合、サーバーは 401 応答を送信します。問題は、ASIHTTPRequest 内で 401 応答を確認すると、ログに記録されることです。

[AUTH] Request <ASIHTTPRequest: 0x2031a800> received 401 challenge and must authenticate using (null)

これは...の結果です

ASI_DEBUG_LOG(@"[AUTH] Request %@ received 401 challenge and must authenticate using %@%@",self,[self authenticationScheme],realm);

したがって、基本的にレルムはなく、認証方式は null です。認証を取得する他の手段を試すことなく、要求はすぐにあきらめて失敗します。

メインビューで次のようにリクエストを開始しています。

/* When using a storyboard, this method gets called instead of the old initWithNibName:bundle:. */
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.delegate = self;

    NSURL* url = [NSURL URLWithString:@"http://myserver/file.json"];
        [ASIHTTPRequest setDefaultTimeOutSeconds:20];
        request = [[ASIHTTPRequest alloc] initWithURL:url];
        [request setDelegate:self];
        hasConnected = NO;

        newPicturesPaths = [[NSMutableArray alloc] init];
    }

    return self;
}

と ...

- (void)viewDidLoad
{
  [super viewDidLoad];
  // Do any additional setup after loading the view.

  /* We will try to access the server, if we don't have authentication,
   * we'll present the login view. */
   [request setAuthenticationScheme:(NSString*)kCFHTTPAuthenticationSchemeBasic];
   [request startAsynchronous];
   ...
}

以前にユーザー名/パスワードを保存していない場合にのみ、必要な動作を実装し、ログイン画面を表示する方法についての提案はありますか (また、後でユーザー名/パスワードを保存します)?

編集:私はこれに基づいてロジックを作成していますが、ASIHTTPRequest が実際に動作する方法ではないようです。

4

0 に答える 0