Swift 4 - Alamofire - Authenticate NTLM 使用无效凭据工作



我在验证 NTLM 信誉时遇到问题,当我使用有效凭据时,它可以工作,但是当我使用无效凭据时,它不会失败,它的工作方式与使用有效凭据相同。仅当我首先输入有效凭据时,才会出现这种情况。是否有清除凭据或我在这里做错了什么?这是我的代码:

func loginUser(_ username: String, password: String, completion: @escaping (_ result: Bool) -> Void)
{
let user = username
let password = password
let url = webservice
let credential = URLCredential(user: user, password: password, persistence: .none)
let headers = ["Accept": "application/json;odata=verbose", "Content-type": "application/json;odata=verbose"]
Alamofire.request(url, method: .get, headers: headers).authenticate(usingCredential: credential).responseJSON {
(response) in
print(response.result)
switch response.result {
case .success:
if let value = response.result.value {
completion(true)
}else{
print("There is error in the server response")
completion(false)
}
case .failure (let error):
print("The NTLM request error is: ", error.localizedDescription)
completion(false)
}
}
}

我确实注意到的一件事是,如果我输入有效的信誉,然后等待几分钟并输入无效的信誉,它会按预期工作。

更新

我已经更新了我的代码,如下所示:

func loginUser(_ username: String, password: String, completion: @escaping (_ result: Bool) -> Void)
{
let user = username
let password = password
let url = webservice
let credential = URLCredential(user: user, password: password, persistence: .none)
var urlRequest = URLRequest(url: URL(string: url)!)
urlRequest.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
urlRequest.httpMethod = "get"
urlRequest.setValue("application/json;odata=verbose", forHTTPHeaderField: "Content-type")
urlRequest.setValue("application/json;odata=verbose", forHTTPHeaderField: "Accept")
Alamofire.request(urlRequest).authenticate(usingCredential: credential).responseJSON {
(response) in
switch response.result {
case .success:
if let value = response.result.value {

completion(true)
}else{
print("There is error in the server response")
completion(false)
}
case .failure (let error):
print("The NTLM request error is: ", error.localizedDescription)
completion(false)
}
}
}

添加缓存策略,但我仍然得到相同的结果:(

HTTP 错误不返回.failure。 您需要查看 .success 案例中的响应代码,了解指示身份验证失败的 HTTP 响应。

看这里:Swift Alamofire:如何获取HTTP响应状态代码

。或者您可能遇到了缓存。请参阅: 如何在 Alamofire 中禁用缓存

最新更新