Проверка подлинности имени пользователя / пароля в WKWebView - PullRequest
0 голосов
/ 16 января 2019

При доступе к сайту в Safari он запрашивает имя пользователя и пароль.

Я пытаюсь обернуть веб-сайт в приложение по причинам, однако не могу получить запрос имени пользователя / пароля для запуска.

Это код, который у меня есть на данный момент:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
    var webView: WKWebView!

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

    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        let user = "*****"
        let password = "*****"
        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: "http://WebsiteName")!
        let myRequest = URLRequest(url: myURL)
        webView.load(myRequest)
    }
}

Я ожидал, что будет окно приглашения для имени пользователя / входа в систему, но оно просто останется ошибкой 401 без запроса.

1 Ответ

0 голосов
/ 18 января 2019

Я сделал что-то похожее с webView лет назад, может быть, это поможет

webView.delegate = self
        guard let orderID = orderID else { return }
        let urlString = GET_PAYMENT_PAGE + "\(orderID)" + "&comments=" + DataManager.shared.peymentComment
        guard let url = URL(string: urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!) else { return }
        var request = URLRequest(url: url)

        let username = Authentication.auth.phoneNumber
        let password = Authentication.auth.token
        let loginString = String(format: "%@:%@", username, password)
        let loginData = loginString.data(using: String.Encoding.utf8)!
        let base64LoginString = loginData.base64EncodedString()


        request.httpMethod = "POST"
        request.allHTTPHeaderFields = JSON_HEAD
        request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
        webView.loadRequest(request)
...