又见 SeaTable 的 CSRF 跨域错误
一、问题出现
昨晚将 SeaTable 从 4.2 版本升级到 4.4 版本,又出现了跨域错误,如图:
这张图是从论坛拷贝的,我的忘记截图了……
这个问题在升级到2.7的时候出现过,当时莫名奇妙就好了,详见《Seatable 升级 2.7.0 需避开的问题 》,没啥处理经验,论坛上因出现这个问题的原因各异,也没有一个准确的说法。以下配置基本都试了一遍,还是没能解决问题:
# dtable_web_settings.py 配置文件
# 解决CSRF的问题
CSRF_TRUSTED_ORIGINS = ['xxx.xxx.cn:xx','xxx.xxx.cn:xx']
CSRF_ALLOW_ORIGINS = ['xxx.xxx.cn:xx','xxx.xxx.cn:xx']
SESSION_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SAMESITE = 'None'
CSRF_COOKIE_SECURE = False
二、问题解决
后来偶然间从一个报错里面发现,CSRF_TRUSTED_ORIGINS
配置是需要加协议的:
ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found xxx.xxx.cn:xx. See the release notes for details.
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found xxx.xxx.cn:xx. See the release notes for details.
所以,只需要把配置改成如下,即可解决跨域问题:
# dtable_web_settings.py 配置文件
# 解决CSRF的问题
CSRF_TRUSTED_ORIGINS = ['http://xxx.xxx.cn:xx','https://xxx.xxx.cn:xx']
#CSRF_ALLOW_ORIGINS = ['xxx.xxx.cn:xx','xxx.xxx.cn:xx']
#SESSION_COOKIE_SAMESITE = 'None'
#SESSION_COOKIE_SECURE = False
#CSRF_COOKIE_SAMESITE = 'None'
#CSRF_COOKIE_SECURE = False
可以看到其他配置都是不起作用的,只需要 CSRF_TRUSTED_ORIGINS
配置正确即可。