swift - 具有基本身份验证流程问题的 Alamofire 重新身份验证
问题描述
我有一个 Alamofire Authenticator 协议的实现,它试图处理用户会话在后端过期的情况。
我们正在使用基本身份验证,这需要我们向后端发送自定义登录请求方法。
看起来,在当前的实现中,我们在收到 401 后被阻止发送自定义登录请求。
在下面附加的代码中,两行(标记为 #1 和 #2)是放置 Authenticator 的完成处理程序代码的不同位置。
理想情况下,#1 应该是那里唯一的值,但如果在登录请求发布之前没有完成,那么 alamofire 队列会备份。
所以我的问题是,这是处理自定义基本身份验证握手的重新身份验证的正确方法(有或没有#2),如果不是,我应该看什么来绕过登录请求上的这种阻塞行为?
import Foundation
import MoovementAPI
import Alamofire
import UIKit
class NoCredential: AuthenticationCredential {
var requiresRefresh: Bool { false }
}
class DelegatingAuthenticator: Authenticator {
public func apply(_ credential: NoCredential, to urlRequest: inout URLRequest) {}
public func refresh(_ credential: NoCredential, for session: Session, completion: @escaping (Result<NoCredential, Error>) -> ()) {
Auth.auth()
DispatchQueue.main.asyncIfNeeded {
(UIApplication.shared.delegate as! AppDelegate).appStateController.authenticate() {
[weak self] in
completion(.success(credential)). // #1
}
}
completion(.success(credential)) // #2
}
public func didRequest(_ urlRequest: URLRequest, with response: HTTPURLResponse, failDueToAuthenticationError error: Error) -> Bool {
response.statusCode == 401
}
public func isRequest(_ urlRequest: URLRequest, authenticatedWith credential: NoCredential) -> Bool {
true
}
}
解决方案
推荐阅读
- c - 使用C将BMP图像发送到串口
- javascript - 从另一个自定义重定向到自定义 html 页面
- python - 哪个是 python 中最快的 DOM 解析器?Scrapy 的内置选择器还是 lxml?或其他一些解析器
- php - 检测值是否为 NULL 时,PHP if 语句逻辑似乎不起作用
- c# - 来自 CaffeModel 的检测超出图像范围
- python - 对 Sanic 应用程序进行异步单元测试会引发 RuntimeError:此事件循环已在运行
- python - json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 在发送 56 个请求后出现
- json - 如何使用 Vue 从 json 对象中获取父元素
- data-structures - 删除链表
- laravel - Laravel - 使用 Rule 类自定义错误消息