2016-12-04 10 views
1

Я пытаюсь создать простой WebView, который показывает веб-страницу - страница требует проверки подлинности HTTP для всех страниц (для целей тестирования).swift 3 - аутентификация http в WKWebView

Вот мой код:

class ViewController: UIViewController, WKUIDelegate { 

    var webView: WKWebView! 

    override func loadView() { 
     let webConfiguration = WKWebViewConfiguration() 
     webView = WKWebView(frame: .zero, configuration: webConfiguration) 
     webView.uiDelegate = self 
     view = webView 
    } 

    // #1 variant 
    func webView(webView: WKWebView, willSendRequestForAuthenticationChallenge challenge: 
     URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { 
     let user = "user" 
     let password = "pass" 
     let credential = URLCredential(user: user, password: password, persistence: URLCredential.Persistence.forSession) 
     challenge.sender?.use(credential, for: challenge) 
    } 

    // #2 variant 
    func webView(webView: WKWebView, didReceiveAuthenticationChallenge challenge: URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { 

      let user = "user" 
      let password = "pass" 
      let credential = URLCredential(user: user, password: password, persistence: URLCredential.Persistence.forSession) 
      challenge.sender?.use(credential, for: challenge) 

    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let myURL = URL(string: "https://myurl.com") 
     let myRequest = URLRequest(url: myURL!) 
     webView.load(myRequest) 
    } 

} 

Я нашел willSendRequestForAuthenticationChallenge и didReceiveAuthenticationChallenge, но ни один из них не называется, и я получил сообщение об ошибке с сервера, что я не прошедшего проверку подлинности.

Может ли кто-нибудь помочь?

Большое вам спасибо!

Дэвид

+0

Fixed вариант # 1, добавляя "_": функ WebView (_ Webview: WKWebView, didReceive challenge: URLAuthenticationChallenge, completeHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { let user = "user" let password = "pass" пусть удостоверения = URLCredential (пользователь: пользователь, пароль: пароль, настойчивость: URLCredential.Persistence.forSession) challenge.sender .use (удостоверение, для: вызова)? completionHandler (URLSession.AuthChallengeDisposition.useCredential, удостоверение) } – David

+0

Вы имели в виду использовать WKUIDelegate? Я расширил класс контроллера вида с помощью WKNavigationDelegate (установка webView.navigationDelegate = self вместо webView.uiDelegate = self) и включил следующую функцию: func webView (_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completeHandler: @escaping (URLSession.AuthChallengeDisposition , URLCredential?) -> Void) { – CScott

+0

да, я поделился ответом уже ниже – David

ответ

1

Fixed вариант # 1, добавляя "_":

func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { 

     let user = "user" 
     let password = "pass" 
     let credential = URLCredential(user: user, password: password, persistence: URLCredential.Persistence.forSession) 
     challenge.sender?.use(credential, for: challenge) 
     completionHandler(URLSession.AuthChallengeDisposition.useCredential, credential) 
} 
0

Он работает путем удаления (или закомментировать) эту строку. challenge.sender?.use(credential, for: challenge) Я проверил его также в других версиях iOS 9.X, 10.1, 10.2 и 10.3. Все работает нормально.

func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { 
    let user = "user" 
    let password = "pass" 
    let credential = URLCredential(user: user, password: password, persistence: URLCredential.Persistence.forSession) 
    completionHandler(URLSession.AuthChallengeDisposition.useCredential, credential) 

}

0

Я сделал UIViewController с WKWebView, которые управляют аутентификации, можно установить с помощью CocoaPod

 Смежные вопросы

  • Нет связанных вопросов^_^