0
votes

When application is failed to login/authenticate successfully with restkit in first attempts due to wrong username or password, application never get success even with correct username and password, any help would be appreciated in this. On login button i create the restkit instance and pass the information here is the code

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])
    }

then initialize my web interface class

-(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;
}

After initializing i create mapping and send post request Everything works fine if application send correct credential very first time

Here is the log for second time fail even application passing correct credential

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 MyProject[7033:95645] E restkit.network:RKObjectRequestOperation.m:551 Object request failed: Underlying HTTP request operation failed with error: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1011 "Expected status code in (200), got 401" UserInfo={NSLocalizedRecoverySuggestion={"timestamp":"2016-02-11T06:37:45.103+0000","status":401,"error":"Unauthorized","message":"Failed authenticating with username and password","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 { "Cache-Control" = "no-cache, no-store, max-age=0, must-revalidate"; "Content-Length" = 171; "Content-Type" = "application/json;charset=UTF-8"; Date = "Thu, 11 Feb 2016 06:37:44 GMT"; Expires = 0; Pragma = "no-cache"; Server = ""; "Set-Cookie" = "VCAP_ID=7487ff5a5d1940b895d0459b91eaec009a55f1ebd2774084b28fc6d24cab0f01; Path=/; HttpOnly"; "Strict-Transport-Security" = "max-age=31536000 ; includeSubDomains"; "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-Content-Type-Options" = nosniff; "X-Frame-Options" = DENY; "X-Xss-Protection" = "1; mode=block"; } }, NSLocalizedDescription=Expected status code in (200), got 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 Unauthorized / 0 objects) [request=0.9732s mapping=0.0000s total=0.9869s]: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1011 "Expected status code in (200), got 401" UserInfo={NSLocalizedRecoverySuggestion={"timestamp":"2016-02-11T06:37:45.103+0000","status":401,"error":"Unauthorized","message":"Failed authenticating with username and password","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 { "Cache-Control" = "no-cache, no-store, max-age=0, must-revalidate"; "Content-Length" = 171; "Content-Type" = "application/json;charset=UTF-8"; Date = "Thu, 11 Feb 2016 06:37:44 GMT"; Expires = 0; Pragma = "no-cache"; Server = ""; "Set-Cookie" = "VCAP_ID=7487ff5a5d1940b895d0459b91eaec009a55f1ebd2774084b28fc6d24cab0f01; Path=/; HttpOnly"; "Strict-Transport-Security" = "max-age=31536000 ; includeSubDomains"; "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-Content-Type-Options" = nosniff; "X-Frame-Options" = DENY; "X-Xss-Protection" = "1; mode=block"; } }, NSLocalizedDescription=Expected status code in (200), got 401} 2016-02-11 12:07:45.216 DeepField[7033:94063] Error from server in Post Request

1
Not a RestKit problem. It's something about how you manage your auth headers...Wain
thanks for responding but both case i am sending same header except authorization value but very first time when we put correct user name it works. but when we put wrong password first time then not able to login again until i exit the application and login again. { "Accept-Language" = "en-US;q=1"; Authorization = "Basic dGVzdEBkZWVwZmllbGQuY29tOlRlc3RUZXN0MTIzIQ=="; "User-Agent" = "project/1 (iPhone; iOS 9.2; Scale/3.00)"; }jatin

1 Answers

0
votes

I just set header again for restkit httpclient and it starts working.

RKObjectManager* rkobjmanagerDF;

[[rkobjmanager.HTTPClient defaultHeaders] setValue:@"application/json" forKey:@"Content-Type"]; [[rkobjmanagerDF.HTTPClient defaultHeaders] setValue:@"application/json" forKey:@"Accept"];