Как передать NSURLCredential в NSURLSession?

Я немного смущен этим. У меня есть этот метод.

-(BOOL)verifyAuth: (NSString*)username forPassword:(NSString*)password
{
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLCredential *creds = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceForSession];

    [session dataTaskWithURL:MALAuthVerifyURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 
    {

         NSLog(@"%@",data);
    }];
    return YES;
}

Как передать учетные данные объекту NSURLSession? Документы Apple говорят следующее:

"После того, как вы создали объект NSURLCredential:

Для NSURLSession передайте объект отправителю запроса проверки подлинности, используя предоставленный блок обработчика завершения».

Но я не уверен, что это на самом деле означает. Я не могу найти примеры такого использования.

Спасибо.


person Joseph Toronto    schedule 19.11.2013    source источник


Ответы (2)


https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/URLLoadingSystem/Articles/AuthenticationChallenges.html#//apple_ref/doc/uid/TP40009507-SW1

Базовая проверка подлинности HTTP (NSURLAuthenticationMethodHTTPBasic) требует имени пользователя и пароля. Запросите у пользователя необходимую информацию и создайте объект NSURLCredential с помощью credentialWithUser:password:persistence:.

После того, как вы создали объект NSURLCredential:

  • Для NSURLSession передайте объект отправителю запроса проверки подлинности, используя предоставленный блок обработчика завершения.
  • Для NSURLConnection и NSURLDownload передайте объект отправителю запроса аутентификации с помощью useCredential:forAuthenticationChallenge:.

Может быть, это поможет.

person Ilya S    schedule 02.04.2014

Вам нужно будет реализовать другой метод делегата, -URLSession:task:didReceiveChallenge:challenge:completionHandler:.

person zadr    schedule 19.11.2013
comment
Спасибо за ответ. Как насчет базовой HTTP-авторизации, когда вы не ждете запроса от сервера, а передаете имя пользователя: пароль с каждым запросом? - person Joseph Toronto; 20.11.2013
comment
@Joseph Мое предположение было бы таким: создайте свою сессию на основе вашей собственной конфигурации NSURLSessionConfiguration, у которой есть свойство URLCredentialStorage, которое вы можете установить. Настройте это с помощью Credential/Protection Space с NSURLAuthenticationMethodHTTPBasic, и я полагаю, что он будет использовать это вместо вызова обратного вызова. Это еще не то, что я пробовал, хотя ... - person Matt Gibson; 02.04.2014