簡體   English   中英

Django rest 框架 CORS(跨源資源共享)不工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM