Добавление Firebase IdToken с обработчиком завершения к каждому запросу AlamoFire - PullRequest
0 голосов
/ 24 февраля 2019

Я понимаю, как добавить заголовки пользовательских HTTP-запросов, такие как токены авторизации, как этот вопрос SO

Моя сложность заключается в использовании Firebase API для получения токена канала-носителя, потому что он имеетобработчик завершения в случае истечения срока действия токена носителя, токен обновления используется для попытки получения нового токена носителя:

static func getIdToken(completion: @escaping (String?, Error?) -> Swift.Void) {
    guard let user =  Auth.auth().currentUser else {
        print("No Firebase User!")
        completion(nil, nil)
        return
    }

    user.getIDToken { (idToken, error) in
        if(error != nil ) {
            print("AuthUtiltiy, error retrieving token: \(error!.localizedDescription)")
            completion(nil, error)
            return
        }

        completion(idToken, nil);
    }
}

Я начал абстрагироваться от AlamoFire SessionManager, где я могу добавить дополнительный HTTPЗаголовки запросов: класс LibraryAPI: NSObject {

private var manager = Alamofire.SessionManager.default

// Setups the cookie and shared instance
override init() {
    let defaultHeaders = manager.session.configuration.httpAdditionalHeaders ?? [:]
    let configuration = URLSessionConfiguration.default
    configuration.httpAdditionalHeaders = defaultHeaders
    manager = Alamofire.SessionManager(configuration: configuration)
}

Но из-за этого обработчика обратного вызова / завершения в вызове getIdToken в Firebase я не могу добиться добавления токена авторизации к каждому запросу в моей инициализации абстракции.

Я также пытался свернуть мои фактические HTTP-запросы с помощью AlamoFire, но у меня все еще есть та же проблема.

Я не думаю, что могу использовать RequestAdapter, , представленный в AlamoFire 4.0 , опять же из-за того же обработчика обратного вызова / завершения Firebase.getIdToken.

1 Ответ

0 голосов
/ 25 февраля 2019

Нет простого способа поддержать это в Alamofire 4 из-за синхронности RequestAdapter, как вы заметили.Тем не менее, в Alamofire 5 (в настоящее время в бета-версии) RequestAdapter был обновлен, чтобы быть асинхронным именно по причине, указанной здесь.Обновление, если вы можете, было бы самым простым способом элегантной поддержки этого случая.

...