允许 CSRF_TRUSTED_ORIGIN django 中的所有 ips

Allow all ips in CSRF_TRUSTED_ORIGIN django

如何在 django 的 CSRF_TRUSTED_ORIGIN 中允许所有/任何 ips 后端 django restapi 是 运行,前端在一个系统上 angular,我们试图在另一个系统中使用系统 ip 访问,我能够访问前端,同时访问后端 POST 方法API 不工作它显示在 csrf 可信来源中找不到。 在 settings.py 我做了 get dynamic ips.

import socket
def get_ipaddress(): 
    
   host_name = socket.gethostname()
   ip_address = socket.gethostbyname(host_name) 
   return "http://"+ip_address+":4200"

ALLOWED_HOSTS=["*"]
CSRF_TRUSTED_ORIGINS=[get_ipaddress()]

尝试使用 csrf_excempt ,但它不起作用。 django4.0.1版本, Angular16

对于 CSRF,您只需要 whitelist/allow 托管您的 angular 应用程序的服务器的 IP。当您使用 运行 angular 应用程序时,您应该将您在浏览器中访问 angular 应用程序的 url 列入白名单 例如:"http://localhost:4200"http://192.168.1.1:4200。或 https://whateveryourwebappurlis.com.

这是您用来在浏览器中加载应用程序的 URL。您需要将其列入白名单。


CSRF_TRUSTED_ORIGINS=["http://localhost:4200", "https://whateveryourwebappis.com"]
</pre>
<p>确保您将此传递到 django 应用程序请求的来源 header。</p>
<p>阅读更多信息:<a href="https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins" rel="nofollow noreferrer">https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins</a></p>
<p>如果您尚未将方法和 header 列入白名单,请在您的设置中也这样做。</p>
<pre>CORS_ALLOW_ALL_ORIGINS=False

CSRF_TRUSTED_ORIGINS = [
    "http://yourwhitelistedip.com",
]

CORS_ALLOW_METHODS = [
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
]

CORS_ALLOW_HEADERS = [
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
]
socket.gethostbyname(host_name.local)

当在 get_ipaddress 中使用上述行时,它起作用了