Вход пользователя в AFNetworking

Я создаю свое первое приложение для iOS.

У меня есть внутренний код, но я борюсь с его частью Objective-C.

У меня есть страница регистрации/входа.

Но я не знаю, как отправить эти данные на мой сервер с помощью Objective C.

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

Я загрузил и добавил AFNetworking в свой проект XCode и настроил заголовки.

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com]];

[client setDefaultHeader:@"key" value:@"value"];
[client setAuthorizationHeaderWithUsername:@"username" password:@"password"];
[client setAuthorizationHeaderWithToken:@"token"];

NSURLRequest *request = [client requestWithMethod:@"someMethod" path:@"somePath" parameters:nil];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

но я все еще потерян.


person JoseSwagKid    schedule 16.02.2013    source источник
comment
Вы пытаетесь выполнить HTTP-аутентификацию или пытаетесь войти в свой собственный API для отдыха?   -  person i_am_jorf    schedule 17.02.2013
comment
Я пытаюсь войти в свой собственный API   -  person JoseSwagKid    schedule 17.02.2013
comment
Я действительно новичок в этом - раньше я делал одно веб-приложение. Я пытаюсь использовать свой внутренний код для создания пользовательского входа в систему на iPhone.   -  person JoseSwagKid    schedule 17.02.2013


Ответы (3)


Поскольку вы пытаетесь войти в свой собственный API, вам не нужны вещи setAuthorization. Это для базовой HTTP-аутентификации. Вместо этого вы хотите использовать getPath:parameters:success:failure или версию postPath, в зависимости от того, ожидает ли ваш сервер HTTP GET или HTTP POST.

Передайте свой идентификатор пользователя/пароль в аргументе параметров. Вы должны установить правильный формат parameterEncoding. . Вероятно, вы используете кодировку URL-адресов HTTP Forms или JSON. Независимо от того, что ожидает ваш бэкэнд.

person i_am_jorf    schedule 16.02.2013
comment
Можете ли вы предоставить нам ссылку, где описано, как должен выглядеть формат имени пользователя и пароля при отправке их в объект параметров вызова метода getPath:parameters:success:failure? Заранее спасибо. - person uerceg; 02.12.2013

Вы не хотите устанавливать заголовки авторизации в этом случае, так как это для "основной HTTP-аутентификации доступа", которая является методом пользовательского агента HTTP для предоставления имени пользователя и пароля при создании запрос к серверу.

Вы хотите использовать свой собственный API и взаимодействовать с спокойным сервером, и поэтому я бы рекомендовал вам подкласс AFHTTPClient -> взаимодействие с API, веб-службой или приложением. - Посмотрите примеры в zip-архиве AFNetworking, если у вас возникли трудности с созданием подкласса AFHTTPClient.

Поскольку вы хотите создать приложение с логином пользователя, приложение должно отправить эту информацию на ваш сервер, и сервер должен вернуться, если вход был успешным или нет. Это можно сделать так — HTTP POST.

 - (void)login {

    // Login information from UITextFields
    id params = @{
        @"username": self.usernameField.text,
        @"password": self.passwordField.text
    };

    //Call the AFHTTP subclass client, with post block. postPath = the path of the url,   where the parameters should be posted. 
    [[theAuthAPIClient sharedClient] postPath:@"/login"
                                parameters:params
                                   success:^(AFHTTPRequestOperation *operation, id responseObject) {

                                       //handle succesful response from server. 

                                   } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                       // handle error - login failed
                                       }
                                   }];

}

Вам нужно передать параметры в правильном формате, в зависимости от того, какой формат ожидает ваш сервер. Это можно сделать, установив правильную кодировку в подклассе AFHTTPClient -> Кодировка Параметров

person 7c9d6b001a87e497d6b96fbd4c6fdf    schedule 16.02.2013
comment
Не могли бы вы добавить больше деталей/контекста к этому? Это не работает для меня. Кажется, я не понимаю аспекта sharedClient. У меня также есть два набора NSLogs, один для успеха, один для ошибки, но ни один из них не вызывается. Спасибо. - person Luke Irvin; 17.02.2013
comment
Да, но можете ли вы быть более конкретным? Это только общий клиент, который не работает/вы не понимаете, или это код, который я предоставил? - person 7c9d6b001a87e497d6b96fbd4c6fdf; 17.02.2013
comment
Сервер возвращает application/json Однако, когда я использовал это, он все равно все время терпит неудачу. - person JoseSwagKid; 17.02.2013
comment
Код, который я разместил выше, предназначен для отправки данных POST на сервер, а не для GET, и он полностью функционирует (я использую точно такой же код в своем приложении). Вы должны быть более конкретными, fx. где в коде происходит сбой и т. д. Если вы хотите ПОЛУЧИТЬ данные с вашего сервера, измените postPath на getPath. - person 7c9d6b001a87e497d6b96fbd4c6fdf; 18.02.2013

Поскольку я пришел сюда в поисках рабочего решения для AFNetworking 2.0, не зная, что AFHTTPClient был удален из Framework, я опубликую здесь новый способ установки этого соединения:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com"]];
[manager setRequestSerializer:[AFHTTPRequestSerializer serializer]];
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"userName" password:@"password"];
person Git.Coach    schedule 14.03.2014