【问题标题】:WKWebView How to add auth cookies from HTTPCookieStorageWKWebView 如何从 HTTPCookieStorage 添加授权 cookie
【发布时间】:2017-03-07 14:49:16
【问题描述】:

我正在开发一个使用混合原生视图控制器和UIWebView 的应用程序。应用程序登录由 API 处理,我有一个实用函数可以将身份验证令牌保存到 HTTPCookieStorage 中的 cookie 以及持久用户模型中。

现在我想更新到 WKWebView,但它不会像 UIWebView 那样自动从 HTTPCookieStorage 加载 cookie。

我找到了一种方法来保存来自答案 here 的响应 cookie,并且我可以修改答案以将身份验证令牌也存储到我的用户模型中,但我不确定如何将 cookie 用于新请求.我只需要将 cookie 添加到初始加载中,因为我将禁用 Web 视图中的导航。

有没有办法可以将 cookie 值添加到标头或其他解决方案?

这是我将用来从响应中获取 cookie 的代码。

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
if let urlResponse = navigationResponse.response as? HTTPURLResponse,
   let url = urlResponse.url,
   let allHeaderFields = urlResponse.allHeaderFields as? [String : String] {
   let cookies = HTTPCookie.cookies(withResponseHeaderFields: allHeaderFields, for: url)
   HTTPCookieStorage.shared.setCookies(cookies , for: urlResponse.url!, mainDocumentURL: nil)
   decisionHandler(.allow)
}
}

【问题讨论】:

    标签: swift3 wkwebview


    【解决方案1】:
    func webViewDidStartLoad(webView: UIWebView)
    {
    
    
        let currentURL: String = webView.stringByEvaluatingJavaScriptFromString("window.location.href")!
    
        print("currentURL =\(currentURL)")
    
        self.invalidUserNameMsg.hidden = true;
        self.startActivityIndicatory()
    
        if(!self.isLoginButtonClick)
        {
            let cookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
            var cookieStr:String = ""
            let cookies = cookieStorage.cookies!
            let strTemp = self.linstance_url.stringByReplacingOccurrencesOfString("https://", withString: "")
            for cookie in cookies {
                cookieStr = cookieStr + "=" + cookie.name + "=" + cookie.value
    
    
                if(cookie.name == "sid" && (cookie.value.characters.count > 100) && cookie.domain == strTemp)
                {
    
                    ApplicationContext.sharedInstance.accessToken = cookie.value
                    ApplicationContext.sharedInstance.instanceUrl = self.linstance_url
                    ApplicationContext.sharedInstance.orgNamespace = orgNamespaceStr
    
    
                    NSUserDefaults.standardUserDefaults().setObject(cookie.value, forKey: "accessToken")
                    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "IsSSOLogin")
                    NSUserDefaults.standardUserDefaults().setObject(self.linstance_url, forKey: "linstance_url")
    
                    NSUserDefaults.standardUserDefaults().synchronize()
    
                    let appDelegate : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate;
    
                    appDelegate.isSidValue = true
                    NSOperationQueue.mainQueue().addOperationWithBlock {
    
                        self.ssoWebView.hidden = true
                        self.ssoWebViewCloseButton.hidden = true
    
                    }
    
    
                    if(!self.isLoginButtonClick)
                    {
                        userNameTextField.text = ""
                        passwordTextField.resignFirstResponder();
                        userNameTextField.resignFirstResponder();
                        loginScrollView.contentSize = CGSizeMake(loginScrollView.frame.width, loginScrollView.frame.height - 100)
    
                        self.loginButtonAction(UIButton)
                        self.isLoginButtonClick = true
                    }
    
                }
    
            }
        }
    }
    
    func webViewDidFinishLoad(webView: UIWebView)
    {
    
    
        self.stopActivityIndicator()
    
    
    
    
    }
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?)
    {
        self.stopActivityIndicator()
    }
    

    【讨论】:

    • 这不是 WKWebView。
    猜你喜欢
    • 2017-01-23
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2018-02-14
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多