我试图在使用 Alamofire 发出 iOS 请求时禁用缓存。当我尝试向服务器发出请求,然后以其他用户身份进行身份验证时发出请求时,我会收到 304 状态代码。
我已经尝试过一切这个链接 https://stackoverflow.com/questions/32199494/how-to-disable-caching-in-alamofire,所有这些都不起作用或导致错误。
后端使用 Express.js 处理请求,使用 Passport.js 进行用户身份验证。
在 Alamofire 和 iOS 应用程序上禁用缓存的正确方法是吗?或者我可以做些什么来防止后端发生这种情况?不管怎样,我不太确定下一步如何前进。
Update
进一步研究这个问题后,看起来 Alamofire 正在发送完全相同的身份验证信息,即使传递到身份验证部分的信息完全不同。但是,如果我等待几分钟并再次尝试该请求,它将更新为正确的身份验证信息。即使您在新请求中更新了身份验证信息,这几乎就像会缓存几分钟一样。因此,您无法更改身份验证信息,直到它每隔几分钟左右清除一次。这更没有意义。
Update 2
下面是我的代码
func reloadData() {
print("Reloading data!!")
let headers: HTTPHeaders = [
"testvalidationtoken": "test",
]
let keychain = KeychainSwift()
let email: String = keychain.get("email")!
let password: String = keychain.get("password")!
var configuration = URLSessionConfiguration()
configuration.urlCache = nil
var manager : SessionManager = SessionManager(configuration: configuration)
manager.request("http://IPHERE:3000/api/path", headers: headers).authenticate(user: email, password: password).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print("JSON: \(json)")
for item in json.array! {
let title: String? = item["title"].stringValue
self.titles.append(title!)
self.colors.append(UIColor.blue)
}
self.tableView.reloadData()
case .failure(let error):
print ("My Error")
print (error)
let alertController = UIAlertController(title: "Error", message: "Error, please try again", preferredStyle: UIAlertControllerStyle.alert)
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in
}
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
}
}
Update 3
let loginString = String(format: "%@:%@", email, password)
let loginData = loginString.data(using: String.Encoding.utf8)!
let base64LoginString = loginData.base64EncodedString()
print(base64LoginString)
let headers: HTTPHeaders = ["Authorization": "Basic \(base64LoginString)"]
因此,在使用上面的最新代码来处理 HTTP 身份验证后,我仍然遇到问题。打印时base64LoginString
在 iOS 设备上,它返回一个值,然后使用这些标头将请求发送到服务器时authorization
= 之前的值。