身份验证挑战
Posted
技术标签:
【中文标题】身份验证挑战【英文标题】:Authentication Challenge 【发布时间】:2012-06-28 17:32:23 【问题描述】:我尝试使用 webview 访问受保护的 web 文件夹。使用“硬编码”用户并通过它可以工作,但我的计划是弹出一个警报视图以输入用户并通过。这是代码的一部分:
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *)challenge
NSLog(@"Need Authentication");
UIAlertView *webLogin = [[UIAlertView alloc] initWithTitle:@"Authentication"
message:@"Enter User and Pass"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK"
, nil];
webLogin.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
[webLogin show];
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
user = [[alertView textFieldAtIndex:0]text];
pass = [[alertView textFieldAtIndex:1]text];
NSLog(@"user is %@ and pass is %@",user,pass);
if (buttonIndex == [alertView cancelButtonIndex])
[self dismissModalViewControllerAnimated:YES];
else if (buttonIndex != [alertView cancelButtonIndex])
NSLog(@"OK Pressed");
[self handleAuthentificationOKForChallenge:nil withUser:user password:pass];
- (void)handleAuthentificationOKForChallenge:(NSURLAuthenticationChallenge *)aChallenge withUser:(NSString *)userName password:(NSString *)password
NSURLCredential *credential = [[NSURLCredential alloc]
initWithUser:userName password:password
persistence:NSURLCredentialPersistenceForSession];
[[aChallenge sender] useCredential:credential forAuthenticationChallenge:aChallenge];
谁能告诉我如何调用handleAuthenticationOKForChallenge 我对 NSURLAuthenticationChallenge 有点困惑......
【问题讨论】:
【参考方案1】:首先,如果两个if
语句正在比较同一个变量,则它们不应该一个接一个地使用它们。您的第二个if
语句应该是else if
语句。
看起来您的handleAuthentificationOKForChallenge
方法想要接受NSURLAuthenticationChallenge
的实例,但您目前只是传递它nil
。
为什么不在头文件中声明NSURLAuthenticationChallenge
的实例(我们称之为myChallenge),并在第一个方法中使用challenge
分配和初始化它。您也可以将其设置为等于挑战(如果您想先尝试一下,可能会起作用),但您可能会在某些时候丢失指针。
然后,您将在第二种方法中将您的行更改为:
[self handleAuthentificationOKForChallenge:myChallenge withUser:user password:pass];
让我知道这是否有效......
【讨论】:
如果更正 :-) 那么,你能告诉我如何初始化 ivar 吗? myChallenge = [[NSURLAuthenticationChallenge alloc] initWith ...? 尝试:myChallenge = [[NSURLAuthenticationChallenge alloc] initWithAuthenticationChallenge:challenge sender:challenge.sender]; 别工作!有不同的challenge和mychallenge值可以吗? 如果您从挑战中初始化 mychallenge,challenge 和 mychallenge 有何不同?你遇到了什么错误? 知道了! [webView loadRequest:req];我的方法中缺少。初始化 ivar myChallenge = 挑战是绝对正确的! thx4 你的帮助迪伦!!以上是关于身份验证挑战的主要内容,如果未能解决你的问题,请参考以下文章
java.io.IOException : 未找到身份验证挑战