如何在身份验证中修复NSURLErrorDomain错误-1012?

时间:2014-09-28 08:36:57

标签: ios authentication webview nsurlconnection

我使用[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]处理Tumblr帐户的身份验证问题以发送身份验证请求,但在这里我遇到了一个棘手的问题:

  • 每当我第一次发送请求 时,一切都会完美无缺,但是当第一次身份验证完成后再重新发送请求第二次时,会出现&# 34; NSURLErrorDomain错误-1012"。
  • 验证页面加载在webview中,因此验证应该在我的应用程序中完成,无需浏览器。但有趣的是,如果流程在浏览器中运行,则不会出现错误,只有在使用webview 时才会出现错误。
  • 奇怪的是,身份验证使用相同的代码,但只有第一次身份验证才可以完成,只有当我重新安装应用程序时,我才能再次对其进行身份验证,之后又出现了问题
  • 我做了我可以追逐解决问题的一切,我在webview中清理缓存和cookie,执行身份验证过程以查看参数,设置请求的cachePolicy但没有任何帮助。
  • 我还发现,在 ios6 上,该过程没有任何错误。但是在 ios7 上,我得到了-1012。
  • 代码-1012告诉我用户取消了身份验证,但该过程自动进行,我不会取消它。

我想知道问题是否来自NSURLConnection

- (void)authenticate:(NSString *)URLScheme WithViewController:(UIViewController *)con callback:(TMAuthenticationCallback)callback {
self.threeLeggedOAuthTokenSecret = nil;
self.hostViewController = con;
self.callback = callback;
[self emptyCookieJar];

NSString *tokenRequestURLString = [NSString stringWithFormat:@"http://www.tumblr.com/oauth/request_token?oauth_callback=%@", TMURLEncode([NSString stringWithFormat:@"%@://tumblr-authorize", URLScheme])];
NSLog(@"%@", tokenRequestURLString);

NSMutableURLRequest *request = mutableRequestWithURLString(tokenRequestURLString);
NSLog(@"%@", request);
[[self class] signRequest:request withParameters:nil consumerKey:self.OAuthConsumerKey
           consumerSecret:self.OAuthConsumerSecret token:nil tokenSecret:nil];
[self openOAuthViewController];
NSURLConnectionCompletionHandler handler = ^(NSURLResponse *response, NSData *data, NSError *error) {
    NSInteger statusCode = ((NSHTTPURLResponse *)response).statusCode;
    if (error) {
        if (callback) {
            callback(nil, nil, error);
        }
        return;
    }


    NSLog(@"%d", statusCode);
    if (statusCode == 200) {
        self.threeLeggedOAuthCallback = callback;

        NSDictionary *responseParameters = formEncodedDataToDictionary(data);
        self.threeLeggedOAuthTokenSecret = responseParameters[@"oauth_token_secret"];

        NSURL *authURL = [NSURL URLWithString:
                          [NSString stringWithFormat:@"http://www.tumblr.com/oauth/authorize?oauth_token=%@",
                           responseParameters[@"oauth_token"]]];

        [self initOAuthViewControllerWithURL:authURL];
    } else {
        if (callback) {
            callback(nil, nil, errorWithStatusCode(statusCode));
        }
    }
};
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:handler];
}

上面的代码,在 [NSURLConnection sendAsynchronousRequest:queue:completionHandler:] 之前一切正常,在此方法之后,我在completionHandler中收到错误。

0 个答案:

没有答案