2017-01-07 12 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 use). Похоже на проблему с сервером, используйте curl/postman или любой другой клиент REST для получения ответа от вашего сервера, прежде чем продолжить разработку приложения.