didRecive挑战认证方法未调用。

时间:2017-01-24 12:05:04

标签: ios swift authentication

以下是我的代码。我正在尝试使用didReceive challenge方法进行身份验证。 Apple文档说,如果会话任务需要身份验证,并且没有可用的有效凭据,那么' didReceive challenge'方法被调用。但在这种情况下它没有被调用。任何建议将被认真考虑。谢谢:))

adp_th = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY, 5, 1.8)

2 个答案:

答案 0 :(得分:0)

没有调用委托,因为你没有在第一时间设置代理......

使用此方法:

let task = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)

另外,设置URLSessionDataDelegate并遵守协议:

func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Swift.Void)

不使用带完成处理程序的dataTask,因为当您使用该方法时,它不会调用任何委托方法。

答案 1 :(得分:0)

想通过提及Apple在此方面提供出色的文章来补充现有的答案。本文包括示例代码。参见Handling an Authentication Challenge

另外,Apple在其文档和开发人员论坛中都强烈建议使用委托方法来应对基本的身份验证挑战。然而!值得注意的是,并非所有REST API都面临挑战。例如,某些API为匿名用户提供了默认访问级别。他们没有提出挑战。

因此,正确实现委托后,如果未执行回调,则应检查有关基本身份验证的REST API文档。

也许别无选择,只能委托处理并传递适当的标头:

var request = URLRequest(url: url)
request.setValue(basicAuthHeader, forHTTPHeaderField: "Authorization”)

并提供标题:

// Set the security header
private var credentials: String {
    return "\(username):\(password)"
}

private var basicAuthHeader: String {
    let data = credentials.data(using: String.Encoding.utf8)!
    let encoded = data.base64EncodedString()
    return "Basic \(encoded)"
}