当应用程序由于错误的用户名或密码而无法在第一次尝试中使用restkit成功登录/身份验证时,即使使用正确的用户名和密码,应用程序也永远不会成功,任何帮助将不胜感激。在登录按钮上,我创建了 restkit 实例并将信息传递给这里是代码
func sendLoginRequest(userName:String,password:String){
let authenticate:String = String(format: "%@:%@", userName, password)
let plainData = (authenticate as NSString).dataUsingEncoding(NSUTF8StringEncoding)
let base64String = plainData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
print(base64String)
headers = ["Authorization" : String(format: "Basic %@", base64String)]
self.webInterface = DFWebInterface.shareWebInterface(DFModel.sharedInstance.bMockServer)
self.webInterface?.sendRequest(nil,request: LOGIN.rawValue, nil,headers: headers as! [NSObject : AnyObject])
}
然后初始化我的 Web 界面类
-(id)init:(NSString*)strURL :(BOOL)mockServer{
if(nil!=(sDFWebInterface=[super init])){
NSURL *baseURL = [NSURL URLWithString:strURL];
DFAFHTTPClient* client=[[DFAFHTTPClient alloc] initWithBaseURL:baseURL];
sDFWebInterface->rkobjmanagerDF = [[RKObjectManager alloc] initWithHTTPClient:client];
[RKMIMETypeSerialization registerClass:[RKNSJSONSerialization class] forMIMEType:@"text/plain"];
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
}
return sDFWebInterface;
}
初始化后我创建映射并发送发布请求如果应用程序第一次发送正确的凭据,一切正常
这是第二次失败的日志,即使应用程序传递了正确的凭据
2016-02-11 12:07:44.242 MyProject[7033:94063] I restkit.network:RKObjectRequestOperation.m:150 POST 'https://myproject-dev.apps.mycompany-iot-cloud.com/api/v1/authenticate'2016-02-11 12:07:45.215 我的项目[7033:95645] E restkit.network:RKObjectRequestOperation.m:551 对象请求失败:基础 HTTP 请求操作失败,出现错误:错误域=org.restkit.RestKit.错误域代码=-1011 "(200( 中的预期状态代码,已获得 401" UserInfo={NSLocalizedRecoverySuggestion={"timestamp":"2016-02-11T06:37:45.103+0000","status":401,"错误":"未经授权","消息":"使用用户名和密码身份验证失败","路径":"/api/v1/authenticate"}, NSErrorFailingURLKey=https://myproject-dev.apps.mycompany-iot-cloud.com/api/v1/authenticate, AFNetworkingOperationFailingURLRequestErrorKey= { URL: https://myproject-dev.apps.mycompany-iot-cloud.com/api/v1/authenticate }, AFNetworkingOperationFailingURLResponseErrorKey= { URL: https://myproject-dev.apps.mycompany-iot-cloud.com/api/v1/authenticate } { status code: 401, headers { "缓存控制"="无缓存,无存储,最大年龄=0,必须重新验证"; "内容长度" = 171; "Content-Type" = "application/json;charset=UTF-8"; 日期 ="2016 年 2 月 11 日星期四 06:37:44 GMT"; 过期 = 0; 杂注 ="无缓存"; 服务器 = "; "Set-Cookie" = ">VCAP_ID=7487ff5a5d1940b895d0459b91eaec009a55f1ebd2774084b28fc6d24cab0f01;路径=/;HttpOnly"; "严格传输安全" = "最大年龄=31536000 ;包括子域"; "Www-Authenticate" = "Basic realm=\"DEEPFIELD\"; "X-Application-Context" = "gateway-dev:dev,cloud:0"; "X-cf-requestid" = "b0f1e586-8b60-4413-646d-515dbbe1f097, 954fd628-3beb-4777-41be-4eb50221b808"; "X-内容类型选项" = nosniff; "X 帧选项" = DENY; "X-XSS-保护" = "1;模式=块";} }, NSLocalizedDescription=(200( 中的预期状态代码, 得到 401}2016-02-11 12:07:45.216 DeepField[7033:95645] E restkit.network:RKObjectRequestOperation.m:215 POST 'https://myproject-dev.apps.mycompany-iot-cloud.com/api/v1/authenticate' (401 未授权/0 个对象( [request=0.9732s 映射=0.0000s total=0.9869s]: 错误域=org.restkit.RestKit.ErrorDomain Code=-1011 "(200( 中的预期状态代码,已获得 401" UserInfo={NSLocalizedRecoverySuggestion={"timestamp":"2016-02-11T06:37:45.103+0000","status":401,"error":"未经授权","message":"使用用户名和密码进行身份验证失败","path":"/api/v1/authenticate"}, NSErrorFailingURLKey=https://myproject-dev.apps.mycompany-iot-cloud.com/api/v1/authenticate, AFNetworkingOperationFailingURLRequestErrorKey= { URL: https://myproject-dev.apps.mycompany-iot-cloud.com/api/v1/authenticate }, AFNetworkingOperationFailingURLResponseErrorKey= { URL: https://myproject-dev.apps.mycompany-iot-cloud.com/api/v1/authenticate } { status code: 401, headers { "缓存控制"="无缓存,无存储,最大年龄=0,必须重新验证"; "内容长度" = 171; "Content-Type" = "application/json;charset=UTF-8"; 日期 ="2016 年 2 月 11 日星期四 06:37:44 GMT"; 过期 = 0; 杂注 ="无缓存"; 服务器 = "; "Set-Cookie" = ">VCAP_ID=7487ff5a5d1940b895d0459b91eaec009a55f1ebd2774084b28fc6d24cab0f01;路径=/;HttpOnly"; "严格传输安全" = "最大年龄=31536000 ;包括子域"; "Www-Authenticate" = "Basic realm=\"myproject\"; "X-Application-Context" = "gateway-dev:dev,cloud:0"; "X-cf-requestid" = "b0f1e586-8b60-4413-646d-515dbbe1f097, 954fd628-3beb-4777-41be-4eb50221b808"; "X-内容类型选项" = nosniff; "X 帧选项" = DENY; "X-XSS-保护" = "1;模式=块";} }, NSLocalizedDescription=(200( 中的预期状态代码, 得到 401}2016-02-11 12:07:45.216 DeepField[7033:94063] 服务器在提交请求时出错
我只是再次为 restkit httpclient 设置标头,它开始工作。
RKObjectManager* rkobjmanagerDF;
[[rkobjmanager.HTTPClient defaultHeaders] setValue:@"application/json" forKey:@"Content-Type"];[[rkobjmanagerDF.HTTPClient defaultHeaders] setValue:@"application/json" forKey:@"Accept"];