使用 AFNetworking 在 iOS 8 中登录时解析服务器提供未经授权的 (401)
Posted
技术标签:
【中文标题】使用 AFNetworking 在 iOS 8 中登录时解析服务器提供未经授权的 (401)【英文标题】:Parse server giving unauthorised (401) while login in iOS 8 using AFNetworking 【发布时间】:2015-03-09 09:51:46 【问题描述】:您好,我正在开发用于在解析服务器中保存数据的 ios 同步组件,我从解析 Web 端创建了一个类,并将该类命名为 TicketDetail,并添加了一些带有数据的字段,但是当我尝试从我的使用带有链接https://api.parse.com/1/ 的AFNetworking GET 请求的应用程序还通过AFHTTPRequestOperation 将AppID 和客户端密钥作为标头字段传递。在发出请求之前,我正在使用以下代码检查用户是否已在 parse.com 上注册
[PFUser logInWithUsernameInBackground:username password:password
block:^(PFUser *user, NSError *error)
if (user)
// Do stuff after successful login.
NSLog(@"%@",user);
NSLog(@"%@",user.email);
NSLog(@"%@",user.username);
[[AFSyncEngine sharedInstance] startSync];
else
NSLog(@"The login failed. Check error to see why");
UIAlertView *_alert = [[UIAlertView alloc]initWithTitle:@"Unauthorised User" message:@"Would you like to SignUp" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"SignUp", nil];
_alert.tag=89;
[_alert show];
;
];
如果用户没有被授权,他们我使用下面的代码注册用户
PFUser *newUser = [PFUser user];
[newUser setUsername:self.userNameFld.text];
[newUser setEmail:self.emailIdFld.text];
[newUser setPassword:self.passwordFld.text];
[newUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
if (succeeded)
NSLog(@"Registered");
[[[UIAlertView alloc]initWithTitle:@"SignUp" message:@"Successfull" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]show];
else
NSLog(@"%@",error);
];
一旦用户注册并尝试登录,这就是我从解析服务器得到的响应
2015-03-09 14:44:49.742 MyDetails[2360:1369317] 错误 Domain=com.alamofire.error.serialization.response Code=-1011 “请求失败:未授权 (401)” UserInfo=0x7fbf585c0f40 com.alamofire.serialization.response.error.response= 网址:https://api.parse.com/1/classes/TicketDetail 状态码:401, 标题 "访问控制允许方法" = ""; "访问控制允许来源" = ""; 连接=“保持活动”; “内容长度”= 25; “内容类型”=“应用程序/json;字符集=utf-8”; 日期 = “星期一,2015 年 3 月 9 日 09:14:47 GMT”; 服务器=“nginx/1.6.0”; "Www-Authenticate" = "基本领域=\"解析\""; “X-解析平台”= G1; “X-运行时间”=“0.000162”; , NSErrorFailingURLKey=https://api.parse.com/1/classes/TicketDetail, com.alamofire.serialization.response.error.data=, NSLocalizedDescription=请求失败:未授权 (401)
如果有人在 parse.com 和 AFNetworking 工作,请帮助我
【问题讨论】:
【参考方案1】:在 AFNetworking 中,您需要为 https 请求添加安全策略。
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
self.securityPolicy = securityPolicy;
self.requestSerializer = [AFJSONRequestSerializer serializer];
self.responseSerializer = [AFJSONResponseSerializer serializer];
【讨论】:
这就是我的工作方式,但仍然没有解决 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];securityPolicy.allowInvalidCertificates = YES;self.securityPolicy = securityPolicy;[self setRequestSerializer:[AFJSONRequestSerializer 序列化程序]];self.responseSerializer = [AFHTTPResponseSerializer 序列化器];[self.requestSerializer setValue:@"X-Parse-Application-Id" forHTTPHeaderField:kParseAPIApplicationId]; [self.requestSerializer setValue:@"X-Parse-REST-API-Key" forHTTPHeaderField:kParseAPIKey]; 如果上面的方法不行你多半是使用了错误的App ID和Client Key。以上是关于使用 AFNetworking 在 iOS 8 中登录时解析服务器提供未经授权的 (401)的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 5 中使用 AFNetworking 解析 JSON