在iOS上反应Native WebView缺少会话cookie(示例代码)

栏目: ios · 发布时间: 2021-05-06

简介  这篇文章主要介绍了在iOS上反应Native WebView缺少会话cookie(示例代码)以及相关的经验技巧,文章约1950字,浏览量394,点赞数8,值得推荐!

我的WebView应显示具有cookie身份验证的网页。该页面需要在登录时获取会话ID cookie。要进行身份验证,我使用fetch()将登录请求发送到网站。

登录成功后,我可以看到收到了正确的cookie。成功之后,我正在启动WebView。

它适用于Android,但不适用于iOS。

昨天我在SO上尝试了很多不同的方法,比如使用react-native-cookies手动获取cookie,但没有任何帮助。

下面是一个示例组件,与我的应用程序完成相同的操作。我认为问题可能在于我的应用程序的配置,所以我创建了这个非常简单的示例,它也有同样的问题。

export default class App extends Component {
constructor(props) {
  super(props)
  this.state = {
    response: null,
  }
}

async componentDidMount() {
  const response = await this.logIn()
  console.log('LogIn completed', response)
  this.setState({
      response: response
    })
}

async logIn() {
  const url = 'myurl/login?email=email&password=password'
  const headers = {'MyHeader': 'Header text'}
  try {
    let response = await fetch(url, {
      method: 'POST',
      headers: headers,
      // credentials: 'same-origin',
      credentials: 'include',
    })
    return Promise.resolve(response)
  } catch (error) {
    return Promise.reject(error)
  }
}

render() {
  const url = 'myurl/dashboard'
  const headers = {'MyHeader': 'Header text'}
  return (
    <WebView source = {{
      uri: url,
      headers: headers
    }}
    />
  )
}
}

我在iOS 9和iOS 11模拟器以及iOS 11设备上测试了它。

总结一个问题:为什么我用fetch获取的cookie不会仅在iOS上传递给WebView。

答案

我发现了这个问题。缺少cookie只是由错误的“User-Agent”标题引起的错误授权的结果。我试图在WebView标头中传递User-Agent。它在Android上工作正常但需要针对iOS的解决方法。要在iOS上设置User-Agent标头,您需要从AppDelegate更改UserDefaults。

NSString *userAgent = @"YourUserAgentString";
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:userAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];

感谢这个答案:https://stackoverflow.com/a/37917932/3055378


以上就是本文的全部内容,希望对大家的学习有所帮助,本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

react-native webview 修改安卓目录映射(示例代码)

iOS wkWebView点击链接无反应(示例代码)

缺少领域构造函数反应原生ios但领域是链接的

如何使用React Native接收在iOS上导出/共享的文件

从本地webview下载并上传文件(示例代码)

react-native-webview Android 无法正确加载本地html文件(显示源代码)(示例代码)

iOS JS 和 OC交互 / JS 和 native 相互调用(示例代码)

将React转换为React Native(示例代码)