Ios 使用AFN网络进行用户登录

Ios 使用AFN网络进行用户登录,ios,objective-c,afnetworking,Ios,Objective C,Afnetworking,我正在构建我的第一个iOS应用程序 我已经完成了后端代码,但我正在努力解决其中的Objective-C部分 我有一个注册/登录页面 但我不知道如何使用Objective C将数据发送到我的服务器 我读到AFNetworking很好,但我想知道如何使用它进行用户登录 我已经下载了AFNetworking并将其添加到我的XCode项目中,并设置了标题 AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString

我正在构建我的第一个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];

但是我还是迷路了。

因为您试图登录到自己的API,所以不需要设置授权之类的东西。这是用于基本HTTP身份验证的。相反,您希望使用或后路径版本,这取决于后端是否需要HTTP GET或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
                                       }
                                   }];

}

在参数参数中传递您的用户ID/密码。您应该设置为正确的格式。您可能正在使用HTTP表单url编码或JSON。无论后端需要什么。

在这种情况下,您不希望设置授权头,因为这是用于“基本访问HTTP身份验证”,这是HTTP用户代理向服务器发出请求时提供用户名和密码的一种方法

您希望使用自己的API并与restful服务器交互,因此,如果您在对AFHTTPClient进行子类化时遇到困难,我建议您查看AFNetworking zip归档中的示例

由于您希望创建具有用户登录名的应用程序,该应用程序需要将这些信息发送到您的服务器,并且如果登录成功与否,服务器应返回。 这可以像so-HTTPPOST一样完成

 - (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子类中设置正确的编码来实现->

因为我来这里是为了搜索AFNetworking 2.0的工作解决方案,不知道
AFHTTPClient
已从框架中删除,我将在这里发布建立此连接的新方法:

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

你是在尝试进行http身份验证,还是在尝试登录到自己的rest api?我正在尝试登录到自己的api我对此非常陌生-我以前做过一个web应用程序。我正在尝试使用我的后端代码在iPhone上创建用户登录体验,您介意为此添加更多详细信息/上下文吗?这对我不起作用。我似乎不理解它的sharedClient方面。我还设置了两个nslog,一个用于成功,一个用于错误,但两个都没有被调用。谢谢。是的,但你能说得更具体一点吗?是不是只有sharedClient不起作用/你不明白,还是我提供的代码?服务器返回application/json,但是,当我使用它时,它仍然一直失败。我上面发布的代码是将数据发布到服务器,而不是获取,并且它完全正常工作(我在我的一个应用程序中使用了相同的EXACT代码)。您必须更具体一些,fx。代码中的什么地方失败了等等。如果您想从服务器获取数据,请将postPath更改为getPath。您能否为我们提供一个链接,其中描述了在getPath的parameters对象中发送用户名和密码时用户名和密码格式应该是什么样子:parameters:success:failure方法调用?提前感谢。