You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native升级至0.72.6后与Django 3.1.2的CSRF 403问题排查

React Native升级引发CSRF Token 403错误的可能原因

1. AsyncStorage 模块迁移导致旧Token读取失败

RN 0.69版本开始,官方移除了核心库自带的AsyncStorage,将其移至社区维护的@react-native-async-storage/async-storage包。如果旧版本(apk_1)使用的是import AsyncStorage from 'react-native'这种导入方式,升级到0.72.6后该路径已失效——要么读取不到任何数据,要么读取的是新存储模块的空数据。此时请求携带的旧Token(或无Token)与Django当前Session对应的CSRF Token不匹配,直接触发403。

2. Networking模块的Cookie处理逻辑变更

RN 0.68至0.72版本间,对Networking模块的Cookie管理做了多处调整:

  • 默认Cookie存储位置或机制改变,升级后原Session Cookie丢失,Django为新Session生成全新CSRF Token,与AsyncStorage中存储的旧Token脱节。
  • 部分版本优化了Set-Cookie头的解析/存储逻辑,导致Cookie中的csrftoken未被正确同步,AsyncStorage的Token与当前有效Token不匹配。

3. 网络安全策略收紧

RN 0.70+版本默认加强了网络安全配置,比如对Cookie的SameSite属性处理更严格。Django 3.1.2默认CSRF Cookie的SameSite值为Lax,RN升级后网络层对跨站请求的Cookie携带规则更严格,可能导致CSRF Cookie无法正确传递到后端。后端无法通过Cookie获取CSRF Token,也就无法验证请求头里的Token,返回403。

验证建议

  • 检查AsyncStorage导入方式:确认是否已切换到@react-native-async-storage/async-storage,同时验证读取到的Token是否与Django当前返回的csrftoken一致。
  • 排查请求头与Cookie:在Axios中开启日志,确认请求是否携带了正确的Session Cookie和X-CSRFToken头,两者是否匹配。
  • 临时测试:清空AsyncStorage,重新从Django返回的Cookie中获取CSRF Token并存入,再发起请求,观察是否仍出现403。

内容的提问来源于stack exchange,提问作者rao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:31:05