2015-01-27 3 views
0

iOS 앱에서 REST API를 사용하려고합니다. 내가 한 번 로그인 요청을 할 수 있기 때문에 그것이 작동 알아요. 모든 후속 요청은 401 오류로 실패합니다. 시뮬레이터에서 앱을 삭제하더라도 이전에 사용하지 않은 시뮬레이터 유형 (예 : iPad 2, iPhone6 ​​등)으로 변경하기 전까지는 다시 호출 할 수 없습니다. https://www.hurl.it 같은 서비스를 사용하여 원하는만큼 여러 번 동일한 매개 변수를 사용하여 동일한 요청을 할 수 있습니다. AFNetworkingAFHTTPRequestOperationManager을 사용하고 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?AFNetworking to REST API가 401을 반환합니다.

self.manager = [[AFHTTPRequestOperationManager alloc]initWithBaseURL:[NSURL URLWithString:@"https://api.mydomain.com/"]]; 
[self.manager POST:@"services/json/user/login" parameters:@{@"username":@"USERNAME", @"password":@"PASSWORD"} success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    if (![responseObject isKindOfClass:[NSDictionary class]]) { return; } 

    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
    NSDictionary* json = responseObject; 
    self.sessionName = json[@"session_name"]; 
    self.sessionId = json[@"sessionid"]; 
    [defaults setObject:self.sessionName forKey:@"SessionNameKey"]; 
    [defaults setObject:self.sessionId forKey:@"SessionIDKey"]; 

    if (completion) { completion(); } 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Session request failed: %@", error.userInfo); 
}]; 

답변

0

(권한이 없음) 401은 서비스에 대한 액세스 권한이 없음을 의미합니다. 올바른 자격 증명으로 시도하고 있는지 확인하십시오. 분명히 코드에는 아무 문제가 없습니다.

1

첫 번째 로그인이 성공한 경우 이후에 걸려 오는 전화와 함께 보내는 데 사용하는 access_token 번을 받아야합니다.

+0

당신이 올바른지에 대한

sm.session.configuration.HTTPAdditionalHeaders = ["Authorization" : "Bearer \(token!)"] 

새로운 코드입니다. 그리고 그 액세스 토큰은 같은 세션에서 만들어진 모든 후속 요청에 대해 작동합니다. 하지만 시뮬레이터에서 앱을 삭제하고 다시 실행하면 로그인 코드가 실패합니다. – InkGolem

+0

로그인 코드는 평생 한 번만 성공 했나요? 이상 하네. – sarunw

+0

어떤 서비스를 사용하고 있습니까? 그들이 이것을 잘못 구현할 수있는 기회가 있습니까? – sarunw

1

API에 기본 인증이있는 경우 HTTP 헤더에 자격증 명을 전달해야합니다. 는 다음과 같은 방법을 사용할 수 있습니다 헤더에 자격 증명을 설정하려면 : 나는 실제로 sessionManager.session.configuration.HTTPAdditionalHeaders이 iOS9,에 requestSerializer로 덮어 얻을 같은 문제가 있었다 무기명 인증

를 사용하여 스위프트 2.0 iOS9에 대한

[self.manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"username" password:@"password"]; 
+0

이 방법으로 매개 변수를 전달하는 데 동일한 오류가 발생합니다. 나는 이것이 정확하지 않다고 생각한다. 왜냐하면 사용자 이름과 패스워드가 더 정확하게 앱 이름과 앱 토큰이기 때문이다. – InkGolem

+0

웹 서비스에 따라 다릅니다. 오류 코드 401은 사용자가 액세스 권한이 없음을 의미합니다. 서비스가 기본 인증으로 보안이 설정되어 있으면 지정된 방법을 사용하여 자격 증명을 전달할 수 있습니다. – OMK

+0

사실입니다.하지만 여러 번 작업 할 수있는 방법이 있습니다. 두 번째로 '로그인'을 부르지 못하는 경우가 있습니다. – InkGolem

0

업데이트를하는 401 액세스 거부 오류가 발생합니다. iOS9에 iOS8의 노력하지만되지 않은

코드 : iOS9

sm.requestSerializer.setValue("Bearer \(token!)", forHTTPHeaderField: "Authorization") 
관련 문제