我正在使用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的实际行为。