【问题标题】:Adding Firebase IdToken with Completion Handler to Every AlamoFire Request将带有完成处理程序的 Firebase IdToken 添加到每个 AlamoFire 请求
【发布时间】:2019-02-23 21:00:57
【问题描述】:

我了解如何添加客户 HTTP 请求标头,例如授权令牌,like this SO Question

我的复杂之处在于使用 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 请求标头: 类库API: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)
}

但由于 Firebase getIdToken 调用中的回调/完成处理程序,我无法在我的抽象初始化中为每个请求添加身份验证令牌。

我也尝试使用 AlamoFire 来处理我的实际 HTTP 请求,但我仍然遇到同样的问题。

我认为我不能再次使用 RequestAdapterintroduced in AlamoFire 4.0,因为相同的 Firebase.getIdToken 回调/完成处理程序。

【问题讨论】:

    标签: swift firebase firebase-authentication alamofire


    【解决方案1】:

    正如您所指出的,由于 RequestAdapter 是同步的,因此在 Alamofire 4 中支持这一点并不容易。然而,在 Alamofire 5(目前处于测试阶段)中,RequestAdapter 被更新为异步,这正是此处发布的原因。如果可以的话,更新将是优雅地支持这种情况的最简单方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多