我有一个看起来像这样的值
lazy var authHeaders: [String: String] = {
if shouldTokenBeRefreshed() {
let semaphore = DispatchSemaphore(value: 0)
refreshTokens {
semaphore.signal()
}
semaphore.wait()
}
return ["Authorization": "Bearer \(module.client.credential.oauthToken)"]
}()
这个想法是,在请求 my 时auth headers
,如果我的令牌已过期,我将刷新它,然后返回新值。
func refreshTokens(completion: @escaping () -> Void) {
guard let token = keychain.get("refresh_token") else { return }
module.renewAccessToken(
withRefreshToken: token,
success: { [weak self] credential, response, parameters in
guard let self = self else { return }
self.storeTokens([
"access_token": credential.oauthToken,
"refresh_token": credential.oauthRefreshToken
])
completion()
},
failure: { error in
print(error.description)
})
}
由于这是一项async
操作,因此我尝试使用 a 暂停流程,Semaphore
以便在触发完成块后使其继续。
但是,电话没有解决,我不确定为什么。