我的申请有两种观点:
等待用户凭据的登录视图
包含webview的主视图
当用户输入其凭据时,会向服务器发送本机异步POST方法。如果凭据有效,则用户将被重定向到webview视图并使用加载(请求)方法加载它。
注意:请求也是使用上述凭据的POST方法。
这两步认证背后的原因是避免使用403错误登录/密码对打开webview;如果在第一步中验证失败,则用户将保持登录视图。
Here is a flow chart explaining how the authentication works
10.0和11.2之间的iOS版本运行应用程序没有任何问题。使用iOS 11.3的设备和模拟器打开webview,出现403错误。
到目前为止,我可以断言两件事(并且已经过我们的后端测试):
使用异步POST方法验证成功,这意味着凭据正确,应用程序和服务器之间的通信按预期工作
加载webview时,服务器不会收到任何用于验证的参数,这解释了403登录/密码错误。
目前,此问题导致我的应用无法使用,因此非常需要快速修复。 GET请求已经过测试,其参数的发送没有任何问题。
欢迎任何建议。
TL; DR - 由于iOS11.3 POST请求在WKWebViews中无法正常运行,如何使用GET请求进行或多或少的安全认证?
PS:无法将iOS 11.3标签添加到其中,如果有人可以添加它,我将非常感激。
答案 0 :(得分:0)
我遇到了同样的问题:(不知道为什么POST参数在WKWebview加载URL请求时没有发送。 您可以使用URL会话加载网站内容(html资源)并将其填充到WKWebview。但是如果你的页面使用cookie,它将不会保留历史记录或者navigationRequest。
答案 1 :(得分:0)
我用UIWebView代替了WKWebView,它起作用了!
答案 2 :(得分:0)
不幸的是,您无法使用WKWebView做到这一点。
这肯定在webView:decidePolicyForNavigationAction:decisionHandler:中不起作用,因为navigationAction.request是只读的,并且是不可更改的NSURLRequest实例,您无法更改。
如果我理解正确,WKWebView将在单独的内容和网络流程中运行沙盒,并且至少在iOS上,无法拦截或更改其网络请求。
如果您退回到UIWebView,则可以执行此操作。
答案 3 :(得分:0)