gpt4 book ai didi

ios - 使用 Alamofire 拦截每一个响应

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:03 26 4
gpt4 key购买 nike

我只是在探索使用 Alamofire,它非常棒,但我想做一些我认为可行的事情,只是不确定如何做。

我们与服务器的身份验证使用一次性不记名 token 。因此,对于发出的每个请求,我都必须存储随该请求一起发送的新 token 。

我想做的是拦截返回的每个响应并检查 Authorisation header 。将其保存到磁盘,然后转发到等待实际数据的地方。

Alamofire 可以吗?

如果是这样,请指出正确的方向。

谢谢

最佳答案

好吧,在对 github 进行一番搜索和摸不着头脑之后,我决定通过扩展 Request 类型来创建一个新的响应序列化器。

我像这样创建了一个新的 saveAuth() block ......

extension Request {
public static func AuthSaver() -> ResponseSerializer<Bool, NSError> {
return ResponseSerializer { request, response, data, error in
guard error == nil else { return .Failure(error!) }

if let auth = response?.allHeaderFields["Authorization"] as? String {
Router.OAuthToken = auth // this uses a didset on the Router to save to keychain
}

return .Success(true)
}
}

public func saveAuth() -> Self {
return response(responseSerializer: Request.AuthSaver()) {_ in}
}
}

我可以这样调用它......

Alamofire.request(Router.Search(query: query))
.validate()
.responseSaveAuth() // this line
.responseJSON {
response in
// ...
}

它仍然需要在我想删除新发送的身份验证 token 的每个地方添加,但这意味着我也可以选择何时不这样做,而且它是一行代码。

它可能不是扩展中最优雅的代码(我仍在掌握这一切),但它使每次保存身份验证变得更加容易。

关于ios - 使用 Alamofire 拦截每一个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com