2017-01-07 6 views
1

xcode8 Alamofire4로 업데이트하면 AlamofireRequest가 작동하지 않아 요청시 "상태 코드 : 401, 헤더"(인증되지 않음)가 반환됩니다. 사용자 인증이 정확합니다 (사이트를 확인한 경우). 컴파일러 오류가 없지만 '헤더'는 평소와 같이 파란색으로 강조 표시되지 않으므로 헤더를 올바르게 인식하지 못한다고 생각합니다. 여기서 '헤더'에 문제가 있습니까?ios10으로 업데이트 한 후 Alamofire4 요청으로 인해 오류 상태가 발생합니다. 401

let user = "sampleUser" 
    let password = "samplepass" 
    let credentialData = "\(user):\(password)".data(using: String.Encoding.utf8)! 
    let base64Credentials = credentialData.base64EncodedString(options: []) 
    let headers = ["Authorization": "Basic \(base64Credentials)"] 

    var checkUserEndpoint: String = "https://sample.com/ios1/user/\(uidEntered!).json" 

    print(checkUserEndpoint) 

    Alamofire.request(checkUserEndpoint, method: .get, parameters: nil, encoding: JSONEncoding.default, headers : headers) 
     .responseJSON { response in 
       print(response.request) 
       print(response.response) 
       print(response.data) 
이미 대신 헤더이를 사용하여 시도했다, 그러나 차이하지

:

 var headers: HTTPHeaders = [:] 

    if let authorizationHeader = Request.authorizationHeader(user: user, password: password) { 
     headers[authorizationHeader.key] = authorizationHeader.value 
    } 

도 나는이 시도하고 차이를하지를;

Alamofire.request(checkUserEndpoint, 
         method: .get, 
         parameters: nil, 
         encoding: JSONEncoding.default) 

     .authenticate(user: "sampleUser", password: "samplepass") 
     .validate() 
     .responseJSON { response in 
       print(response.request) 
       print(response.response) 
       print(response.data) 
       // print(response.error) 

답변

1

나는 두 번 비슷한 마이그레이션을 완료했습니다, 나의 추측은 문자열 중 하나가 당신이 값은 선택이다, 즉 헤더를 생성하는 통과 점이다. user, password 또는 base64Credentials; ("thestring") 대신 "thestring"을 생성합니다. 다음과 같이 요청을 감싸려고 할 수 있습니다.

if let user = user, password = password, base64Credentials = base64Credentials { 
    let headers = ["Authorization": "Basic \(base64Credentials)"] 

    var checkUserEndpoint: String = "https://sample.com/ios1/user/\(uidEntered!).json" 

    print(checkUserEndpoint) 

    Alamofire.request(checkUserEndpoint, method: .get, parameters: nil, encoding: JSONEncoding.default, headers : headers) 
     .responseJSON { response in 
       print(response.request) 
       print(response.response) 
       print(response.data) 
} 

예를 들어 이런 일이 발생할 수 있습니다. 어떤 경우에는 Objective-C 코드에서 나온 값 들이며 변수는 표시되지 않습니다 nonnull.

... base64Credentials은 설명서에 명시된대로 선택 사항이 아니어야합니다.

0

이 코드는 두 변형 (수동 헤더 생성 및 Alamofire 요청 .authenticate 사용)에서 정확합니다. 서버 측 문제처럼 보이지만 curl/postman 또는 다른 REST 클라이언트를 사용하여 앱 개발을 계속하기 전에 서버에서 응답을 수신하십시오.