4

我在 webView 中打开了一个单点登录站点。用户登录后,我需要获取一个 cookie 来从 API 请求一个令牌,并在应用程序中使用它来处理所有其他请求。这一切在 Android 上都可以正常工作,但是当我请求令牌时,iOS 没有 cookie。WebView 配置为使用共享 cookie 存储:

    <WebView
        source={{ uri: loginUrl }}
        onMessage={handleSsoLogin}
        injectedJavaScriptBeforeContentLoaded={JS_INTERFACE}
        sharedCookiesEnabled={true}
      />

如果我使用 devTools 检查 webView,我可以看到 cookie。另外,如果我再次访问 SSO 站点,我已经登录了它。因此,cookie 被 webView 持久化和使用。它们只是不被使用fetch并且 CookieManager 不访问它们:

const cookies = await CookieManager.get(url);
console.log({ cookies });
...
{"cookies": {}}

那么,问题是,我怎样才能从 webView 中获取这些 cookie?

4

1 回答 1

8

您需要使用 import CookieManager from "@react-native-community/cookies";

在 webview 中,你可以这样做:

 <WebView
          cacheEnabled={false}
          ref={ref => (this.webView = ref)}
          source={{
            uri: "http://yoururl.com"
          }}
          style={{ marginTop: 20 }}
          onNavigationStateChange={this.navChange}
          thirdPartyCookiesEnabled={true}
        />
        {this.state.loading && (
          <ActivityIndicator
            color={"blue"}
            style={{ flex: 20 }}
            size={"large"}
          />
          
          
navChange = e => {
    console.log("e", e);
    this.setState({ loading: e.loading });
    if (e.url == "http://yoururl.com/landing") {
      CookieManager.getAll(true).then(res => {
        console.log("CookieManager.getAll =>", res);
        if (!!res) {
          console.log({res})
          CookieManager.clearAll(true).then(res => {
            console.log("LoginScreen CookieManager.clearAll =>", res);
          });
        }
      });
    }
  };

于 2020-07-30T08:48:21.273 回答