在iOS上反应Native WebView缺少会话cookie
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在iOS上反应Native WebView缺少会话cookie相关的知识,希望对你有一定的参考价值。
我的WebView应显示具有cookie身份验证的网页。该页面需要在登录时获取会话ID cookie。要进行身份验证,我使用fetch()将登录请求发送到网站。
登录成功后,我可以看到收到了正确的cookie。成功之后,我正在启动WebView。
昨天我在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
以上是关于在iOS上反应Native WebView缺少会话cookie的主要内容,如果未能解决你的问题,请参考以下文章
如何将 oAuth 会话令牌从 salesforce react native 应用程序传递给 react-native webview?
初始 react-native run-ios 时缺少 Podfile.lock