[英]Django rest framework CORS( Cross Origin Resource Sharing) is not working
我已经为 url 'localhost:8000/api/posts'完成了令牌身份验证,并且根据 django-cors-headers 库,我还更改了 settings.py 文件。 这是我的 settings.py 文件,
INSTALLED_APPS = [
'corsheaders',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
'rest_framework',
'rest_framework.authtoken'
]
这是我的中间件设置,
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
这是我的其他设置,
CORS_ALLOW_ALL_ORIGINS = False
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = ["http://127.0.0.1:4000"]
在这里,我只授予了“http://127.0.0.1:4000”的访问权限
这是我的客户 django 项目视图文件,托管在“http://127.0.0.1:3000”
import requests
from django.http import HttpResponse
def get_token():
url = "http://127.0.0.1:8000/api/authentication/"
response = requests.post(url, data={'username':'thomas','password':'thomas1234567890'})
token=response.json()
return token
token=get_token()
def get_details():
url = "http://127.0.0.1:8000/api/posts/"
header = {"Authorization": "Token {}".format(token['token'])}
response = requests.get(url, headers = header)
return response.text
def homepage(request):
x= get_details()
return HttpResponse(x)
现在,即使我从 django cors 原始白名单中未提及的其他域请求数据,我也能够毫无错误地获取数据,我无法限制其他域访问数据。 谁能帮我解决这个问题。
根据 CORS_ALLOW_ALL_ORIGINS 的文档
如果为 True,则将允许所有来源。 其他限制允许来源的设置将被忽略。 默认为假。
所以看起来你的 CORS_ALLOWED_ORIGINS 被忽略了,因为 CORS_ALLOW_ALL_ORIGINS 被明确设置为 False 禁止所有来源。
为您的应用使用此设置。 发生这种情况是因为您正在使用HTTPS
而不是HTTP
。
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.