django CSRF_TRUSTED_ORIGINS仅适用于字符串,而不是预期的列表

eanckbw9  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(142)

Context

我正在运行一个Netbox示例,它使用Django。在它的参数中,我必须将CSRF_TRUSTED_ORIGINS设置为我信任的源,以便Netbox正常工作。
我使用的Netbox示例在Docker容器(netbox-docker)中运行。

问题

我发现,如果我像文档中预期的那样将这些作为列表编写(请参阅此处),我会得到一个403错误,描述如下:CSRF verification failed. Request aborted.激活调试模式还告诉我:Origin checking failed - https://myurl does not match any trusted origins.,我不明白,因为我的变量看起来像这样:CSRF_TRUSTED_ORIGINS=['https://172.23.0.5', 'https://myurl']

临时解决方案

如果我将变量设置为一个简单的字符串,我不会得到任何错误:CSRF_TRUSTED_ORIGINS="https://myurl"完美地适用于myurl(当然,它仍然会阻止所有其他URL)。

问题(仍然)

这样做了一段时间,但现在我必须添加第二个域名引用我的Netbox示例,所以我需要将"https://myurl2"添加到可信来源列表中。既然有一个列表在这里不起作用,我真的不知道如何继续下去。

我所尝试的

我试着改变我将它的值赋给变量的方式:

  • CSRF_TRUSTED_ORIGINS="https://myurl","https://myurl2"
  • CSRF_TRUSTED_ORIGINS="https://myurl" "https://myurl2"

这些语法只是给了我语法错误(例如,unexpected character "\"" in variable name)。

TL;DR

我的Netbox(运行Django)只接受CSRF_TRUSTED_ORIGINS变量作为字符串,而根据其文档,它应该接受一个列表。我需要设置多个受信任来源。

erhoui1w

erhoui1w1#

我已经找到解决办法了。这是netbox-docker实现中的问题。定义此参数的env文件实际上需要以下变量格式:CSRF_TRUSTED_ORIGINS=https://myurl https://myurl2(和我试过的一样,但没有引号)。

相关问题