【发布时间】:2022-12-18 08:36:44
【问题描述】:
我正在尝试重试我的 Alamofire 拦截器,因为我使用的是 JSON Web 令牌。适应效果很好。但服务器在用户注册或授权后每 10 分钟更新一次访问令牌。 10 分钟后,访问令牌不再起作用,服务器响应为 401。所以我需要在状态为 401 时刷新令牌。正如我上面提到的,适应效果很好。但我需要帮助了解如何处理重试。下面是我的拦截器:
class RequestInterceptor: Alamofire.RequestInterceptor {
func adapt( _ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) {
var urlRequest = urlRequest
urlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
completion(.success(urlRequest))
}
func retry( _ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
guard let response = request.task?.response as? HTTPURLResponse, response.statusCode == 401 else {
completion(.doNotRetryWithError(error))
return
}
}
}
我的视图模型:
func refreshTokenFunc() {
AF.request(TabBarModel.Request.refreshTokenUrl, method: .post, parameters: parameters, encoder: JSONParameterEncoder.default, interceptor: RequestInterceptor()).response { response in
...
和用法(我使用 SwiftUI):
.task {
tabBarViewModel.refreshTokenFunc()
}
我正在尝试使用互联网上的一些示例。但这对我不起作用。
【问题讨论】:
-
你可以用
refreshToken代替completion(.doNotRetryWithError(error)),并在完成时调用retry()完成再次调用? -
谢谢@Larme,但它不起作用,因为我把它放在那里时看不到印刷品:(
标签: swift jwt token alamofire interceptor