React Native - 在 WebView 中使用 cookie 进行身份验证
Posted
技术标签:
【中文标题】React Native - 在 WebView 中使用 cookie 进行身份验证【英文标题】:React Native - Use cookies to authenticate in WebView 【发布时间】:2021-03-27 09:26:43 【问题描述】:所以我已经为 React Native 应用程序提供了几个 API。 一个端点用于身份验证,它返回一个允许访问其他 API 的 cookie。
cookie 的结构如下:
"auth":"ok","instance":"private","cookies":"SSOsess":"300|c6dc6d70vfvbf0891004364665f24b77","RTBk":"300|451706342c67a37dfe5dede0b5d22469","ph03RPNCiscoASA":"application.api.urlweb.com","ph04RPNCiscoASA":"application.client.urlweb.com"
经过一些格式化后,cookie 就可以发送了,如下所示:
SSOsess=300%7Cc6dc6d70vfvbf0891004364665f24b77; RTBk=300%7C451706342c67a37dfe5dede0b5d22469;
ph03RPNCiscoASA=application.api.urlweb.com;
ph04RPNCiscoASA=application.client.urlweb.com;
React Native 应用程序中的一些 WebView
访问使用最初提供的一些 API 的网站的一些受限部分。
如何将 cookie 发送到WebView
?我知道 React Native 有一些属性可用于将 cookie 注入 WebView,例如 injectedjavascript
或 injectedJavaScriptBeforeContentLoaded
,但这些属性究竟应该包含什么?
我试过用下面的方式发送,但还是不行:
<WebView source= uri: 'http://urlweb.com'
style=width: 600, height: 400
injectedJavaScriptBeforeContentLoaded=jsInjectedCode
/>
在哪里
jsInjectedCode = 'document.cookie = '+'SSOsess=300%7Cc6dc6d70vfvbf0891004364665f24b77; RTBk=300%7C451706342c67a37dfe5dede0b5d22469;
ph03RPNCiscoASA=application.api.urlweb.com;
ph04RPNCiscoASA=application.client.urlweb.com;'
【问题讨论】:
【参考方案1】:您可以将 cookie 字符串传递给 Cookie
内的 header
像这样 DOCS
import React, Component from 'react';
import StyleSheet, View from 'react-native';
import WebView from 'react-native-webview';
export default class App extends Component
render()
const cookiesString="cookie1=asdf; cookie2=dfasdfdas"; //here you can put your cookies
return (
<View style=styles.container>
<WebView
source=
uri: `$domain`,
headers:
Cookie: cookiesString,
,
style=styles.WebViewStyle
/>
</View>
);
const styles = StyleSheet.create(
container:
flex: 1,
backgroundColor: '#FFF',
,
WebViewStyle:
flex: 1,
resizeMode: 'cover',
,
);
【讨论】:
有什么方法可以为每个 cookie 包含一个域吗?如果我尝试cookie1=asdf; ;domain=.domain.com;path=/;
,这将被解释为 3 个 cookie。
@Shury 对不起,我没听懂你的意思。
如果我想为每个 cookie 包含一个域,例如 cookie1=asdf; domain=.domain.com; path=/; cookie2=asdasff; domain=.domain.com; path=/; cookie3=asfadf; domain=.domain.com; path=/;
,这些将被解释为 9 个不同的 cookie,而不是 3 个(cookie + 域 + 路径)。
@Shury 你已经合并了某个域的 cookie。您可以创建一个解析器函数来获取特定域的 cookie。解析器函数会将此 HTTP cookie 更改为 JSON 格式,然后您必须为特定域过滤 cookie
我会在 5 小时内将赏金奖励给你@Muhammad Numan,因为它回答了我最初的问题。我得看看如何传递这些额外的属性。以上是关于React Native - 在 WebView 中使用 cookie 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章
React-native:如何自动保存 webview 当前网页?
有啥方法可以在 react-native-webview 中禁用 hapticFeedback
如何在 iOS 的 WebView(react-native-webview) 中设置自定义字体?
React Native 问题:WebView 已从 React Native 中移除