I am currently trying to change my code from using NSURLConnection to NSURLSession. One thing that is confusing me is authentication.
My service that I am trying to connect is basic authenticated.
In my former code I had the following method by implementing protocol NSURLConnectionDataDelegate:
func connection(connection:NSURLConnection!, willSendRequestForAuthenticationChallenge challenge:NSURLAuthenticationChallenge!) {
if challenge.previousFailureCount > 1 {
} else {
let creds = NSURLCredential(user: usernameTextField.text, password: passwordTextField.text, persistence: NSURLCredentialPersistence.None)
challenge.sender.useCredential(creds, forAuthenticationChallenge: challenge)
}
}
Now I am stuck.
In Apple Developer Reference I have found the following line under didReceiveChallenge
If you do not implement this method, the session calls its delegate’s URLSession:task:didReceiveChallenge:completionHandler: method instead.
What does this mean?
Yes,
If you do not implement NSURLSessionDelegate.didReceiveChallenge method, the session calls its delegate’s URLSession:task:didReceiveChallenge:completionHandler: method instead.
Better to implement both
func URLSession(session: NSURLSession!, didReceiveChallenge challenge: NSURLAuthenticationChallenge!, completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)!) {
if challenge.protectionSpace.authenticationMethod.compare(NSURLAuthenticationMethodServerTrust) == 0 {
if challenge.protectionSpace.host.compare("HOST_NAME") == 0 {
completionHandler(.UseCredential, NSURLCredential(forTrust: challenge.protectionSpace.serverTrust))
}
} else if challenge.protectionSpace.authenticationMethod.compare(NSURLAuthenticationMethodHTTPBasic) == 0 {
if challenge.previousFailureCount > 0 {
println("Alert Please check the credential")
completionHandler(NSURLSessionAuthChallengeDisposition.CancelAuthenticationChallenge, nil)
} else {
var credential = NSURLCredential(user:"username", password:"password", persistence: .ForSession)
completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential,credential)
}
}
}
func URLSession(session: NSURLSession!, task: NSURLSessionTask!, didReceiveChallenge challenge: NSURLAuthenticationChallenge!, completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)!){
println("task-didReceiveChallenge")
if challenge.previousFailureCount > 0 {
println("Alert Please check the credential")
completionHandler(NSURLSessionAuthChallengeDisposition.CancelAuthenticationChallenge, nil)
} else {
var credential = NSURLCredential(user:"username", password:"password", persistence: .ForSession)
completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential,credential)
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With