Случайная ошибка 403 CSRF в React Native WebView

Я загружаю форму (на базе Django) в приложение React Native с помощью react-native-webview. Эта форма имеет защиту CSRF. И большую часть времени она действительно работает нормально, вы можете отправить форму в приложении через webview и все в порядке. Но иногда я получаю ошибку 403 CSRF (CSRF verification failed, Request aborted).

Я не уверен, что может быть причиной этого и как этого можно избежать? Я использую WebView довольно простым способом с оберткой вокруг него.

Если бы была проблема с подключением к сети на мобильном телефоне, то я бы, вероятно, получил ошибку тайм-аута, а не что-то конкретное вроде этого?

import { WebView as BaseWebView } from 'react-native-webview';

const FullScreenWebView = styled(BaseWebView)`
  flex: 1;
`;
...
export const WebView: FC<WebViewProps> = props => {
...
return (
    <Layout.Root>
      {url.startsWith('/') ? (
        <Layout.LoadingFlex1 />
      ) : (
        <FullScreenWebView
          ref={webviewRef}
          source={{ uri: urlWithLang }}
          startInLoadingState={true}
          onShouldStartLoadWithRequest={globalZendeskIntercept}
          // only allow secure webviews and those for our deeplink scheme
          originWhitelist={['https://', `${Config.DEEPLINK_SCHEME}://`]}
          decelerationRate="normal"
          allowsBackForwardNavigationGestures
          onNavigationStateChange={navState => {
            if (navState.canGoBack) {
              setCanGoBack(true);
            } else {
              setCanGoBack(false);
            }
          }}
        />
      )}
    </Layout.Root>
  );
};

У меня была похожая проблема, которая, как оказалось, была вызвана несвежими cookies в iOS WebView.

Все, что я сделал, это очистил все куки до и после рендеринга компонента WebView, чтобы быть уверенным.

import CookieManager from "@react-native-cookies/cookies";

...
    
useEffect(() => {
  CookieManager.clearAll().catch(console.error);

  return () => {
    CookieManager.clearAll().catch(console.error);
  };
}, []);

...

<WebView ... /> 

Возможно, вы можете попробовать. Надеюсь, это поможет!

Вернуться на верх