将带有完成处理程序的 Firebase IdToken 添加到每个 AlamoFire 请求
Posted
技术标签:
【中文标题】将带有完成处理程序的 Firebase IdToken 添加到每个 AlamoFire 请求【英文标题】:Adding Firebase IdToken with Completion Handler to Every AlamoFire Request 【发布时间】: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 请求,但我仍然遇到同样的问题。
我认为我不能再次使用 RequestAdapter
、introduced in AlamoFire 4.0,因为相同的 Firebase.getIdToken 回调/完成处理程序。
【问题讨论】:
【参考方案1】:正如您所指出的,由于 RequestAdapter
是同步的,因此在 Alamofire 4 中支持这一点并不容易。然而,在 Alamofire 5(目前处于测试阶段)中,RequestAdapter
被更新为异步,这正是此处发布的原因。如果可以的话,更新将是优雅地支持这种情况的最简单方法。
【讨论】:
以上是关于将带有完成处理程序的 Firebase IdToken 添加到每个 AlamoFire 请求的主要内容,如果未能解决你的问题,请参考以下文章