ASIHTTPRequest没有身份验证信息,也没有要求它

时间:2013-01-02 22:52:39

标签: objective-c ios authentication asihttprequest

我正在使用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);

基本上,没有领域,认证方案为空。该请求立即放弃并失败,而没有尝试任何其他获取身份验证的方法。

我在主视图中启动了这样的请求:

/* 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];
   ...
}

有关如何实现我想要的行为的任何建议,如果我们之前没有保存用户名/密码(并且以后也保存用户名/密码),则只显示登录屏幕?

编辑:我的逻辑基于this,但似乎不是ASIHTTPRequest的实际行为。

0 个答案:

没有答案