Случайная ошибка 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 ... />
Возможно, вы можете попробовать. Надеюсь, это поможет!