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