【问题标题】:How to dynamically populate CORS_ORIGIN_WHITELIST from the database with django-cors-headers?如何使用 django-cors-headers 从数据库中动态填充 CORS_ORIGIN_WHITELIST?
【发布时间】:2019-08-09 11:29:35
【问题描述】:

我正在编写一个 django 应用程序,其中有一个名为 Website 的模型,其中包含人们的网站。我只允许在我的数据库中有网站的人使用我的 Django REST API。我正在使用django-cors-headers 包将以下人员的域列入白名单:https://github.com/adamchainz/django-cors-headers。

settings.py 中的CORS_ORIGIN_WHITELIST 变量允许我将域列入白名单,如https://github.com/adamchainz/django-cors-headers#cors_origin_whitelist 所示

问题是我必须查询我的模型以获取网站域,将它们附加到列表中,然后将该列表放入 CORS_ORIGIN_WHITELIST。但我不能在 settings.py 中这样做,因为模型是在应用启动后加载的,而 settings.py 是启动应用的那个。

有人知道解决方法吗?任何建议将不胜感激。提前致谢。

【问题讨论】:

  • 每次需要添加新网站时是否会重启网络服务器?
  • 您应该使用为这个用例提供的信号,请参阅docs

标签: python django


【解决方案1】:

django-cors-headers 有一个信号可以让你决定是否允许request 通过。 docs 准确地显示了您的用例。

请注意,CORS_ORIGIN_WHITELIST 也由 cors 中间件检查(信号响应不会替换白名单),因此您可以同时拥有:静态白名单 + 依赖的动态白名单在request。您无需检查信号处理程序中的静态白名单。

【讨论】:

  • 谢谢!看不到这一点是多么愚蠢。
【解决方案2】:

django-cors-headers 也有一个设置CORS_ALLOWED_ORIGIN_REGEXES,如果您允许的来源可以写成正则表达式/正则表达式,它会派上用场。

例如,您可以使用它来允许通配符子域:

CORS_ALLOWED_ORIGIN_REGEXES = [
    r"^https://\w+\.example\.com$",
]

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 2016-01-01
    • 2013-02-25
    • 1970-01-01
    • 2017-05-02
    • 2019-01-17
    • 2011-08-29
    • 2019-10-05
    • 2021-06-25
    相关资源
    最近更新 更多