Запрос Alamofire с авторизационным токеном и дополнительными заголовками Swift - PullRequest
0 голосов
/ 08 апреля 2020

Мой API включает токен на предъявителя авторизации и три дополнительных заголовка . Моя проблема в том, что я неправильно отправляю токен на предъявителя (почтальон возвращает правильные данные, а не мой симулятор). Я вижу много примеров использования request adapter, но не могу ли я это использовать? Спасибо!

На самом деле авторизация находится на вкладке авторизации, а не в шапке.

enter image description here

** Обновлено: Решена проблема, следуя документации. HTTP-заголовки

Вот функция Alamofire с рабочими кодами:

 func getBetsData(completion: ((Bool) -> ())? = nil) {

        guard let token = defaults.string(forKey: "token") else {
            return
        }

        let headers: HTTPHeaders = [
        .authorization(bearerToken: token),
        .init(name: "bet_type", value: type),
        .init(name: "bet_status", value: status),
        .init(name: "page", value: String(page))
    ]

        AF.request("https://example.com", headers: headers).responseDecodable(of: Bets.self) { response in
            switch response.result {
            case .success:
                if let data = response.data {

                    do {
                        let bets = try JSONDecoder().decode(Bets.self, from: data)
                        print("message: \(bets.message)")                      

                        self.setupTableData()
                        completion?(true)
                    } catch {
                        print("Error: \(error)")
                        completion?(false)
                    }
                }
            case.failure(let error):
                print(error)
                completion?(false)
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Вы можете добавить заголовки напрямую:

let headers: HTTPHeaders = [.authorization(bearerToken: token)]

Кроме того, если вы декодируете значение Decodable из ответа, вы не должны использовать responseJSON, поскольку это декодирует Data используя JSONSerialization, а затем вы просто анализируете его снова. Вместо этого вы должны использовать responseDecodable.

AF.request(...).responseDecodable(of: Bets.self) { response in
    // Use response.
}

Это будет намного эффективнее и автоматически будет регистрировать ошибки.

0 голосов
/ 08 апреля 2020

Как упомянуто Диланом, только токена не достаточно, вам понадобится Bearer с тем же параметром Header.

Вот один из лучших методов для обработки Token Request и Retrier во всех запросах, отправляемых на сервер. в приложении

https://www.avanderlee.com/swift/authentication-alamofire-request-adapter/

При этом вам не нужно обрабатывать токен вручную во всех веб-сервисах.

...