标签: django-cors-headers

Django Rest Framework/Angular JS Preflight选项请求

我使用Django REST Framework编写了一个API.对于身份验证,我使用的是django-oauth2-provider:https://github.com/caffeinehit/django-oauth2-provider

我在我的设置页面中配置了cors(使用Corsheaders中间件).

MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
)

CORS_ORIGIN_ALLOW_ALL = True  # Dangerous (using for testing purposes)
Run Code Online (Sandbox Code Playgroud)

我的客户端应用程序是使用Angular JS构建的.但是,每次我们发出任何请求(包括GET请求)时,都会发出一个选项请求.此选项请求需要约50 - 500 ms,具体取决于请求.

api调用看起来像" https://example.com/api/v1/posts/?page=1(2,3,4 ......等)"

我需要了解为什么要提出此请求,以及如何提高应用程序的性能.

javascript django angularjs django-rest-framework django-cors-headers

7
推荐指数
1
解决办法
1249
查看次数

object()在django 1.10中没有参数

我正在尝试在我的应用程序中允许CORS,以便我的跨域javascript客户端可以访问我的API,我已经安装了django-cors-headers.我现在正在尝试添加中间件:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware', # Remove this and it works
    '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',
]
Run Code Online (Sandbox Code Playgroud)

但是这给了我一个TypeError:

TypeError:object()不带参数

这在django 1.10更新之前运行良好.有任何想法吗?

django django-cors-headers

7
推荐指数
2
解决办法
4847
查看次数

让 Django、VUE、CORS 和 CSRF 与真实世界的例子一起工作

我真的被困住了。这就是我想要做的。

  1. 保持 CSRF 开启。- 请不要告诉我关掉它。
  2. 我有一个由 Django 和 Django Rest Framework 运行的 API 应用程序
  3. 我有一个由 Vue 运行的前端应用程序
  4. 我已经安装了 django-cors-headers 来管理 CORS

一切都很好本地化。一旦我将其投入生产,我就开始收到 CSRF 错误。这就是一切的运作方式。

我已经看到了从关闭 CSRF 到允许所有事情的所有答案。我想正确地做到这一点,而不仅仅是关闭和打开所有东西并最终导致安全漏洞。

所以,这就是我所拥有的。

已安装:django-cors-headers django-rest-framework drf-nested-routers ...等

我的 api 在 api.websitename.com 上运行,Vue.js 应用程序在 websitename.com 上运行。

GET 请求效果很好。OPTION 请求似乎有效。

任何有风险的请求都不起作用。

对于我的 CORS,我'corsheaders.middleware.CorsMiddleware',在其他MIDDLEWARE.

然后我的 CORS 设置是:

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
    '*.websitename.com',
)
Run Code Online (Sandbox Code Playgroud)

我的 CSRF 设置是:

CSRF_TRUSTED_ORIGINS = [
    "api.websitename.com",
]
Run Code Online (Sandbox Code Playgroud)

无论我如何使用这些,最终都会出现 CSRF 令牌错误。

我已经尝试过在我的 Vue App.vue 文件中做这样的事情的方法:

mounted () {
  this.getCSRFToken() …
Run Code Online (Sandbox Code Playgroud)

django django-csrf django-rest-framework vue.js django-cors-headers

7
推荐指数
2
解决办法
4680
查看次数

在Django中根据端点设置不同的CORS规则

我正在尝试找出一种方法,根据后端端点前端的命中情况来制定不同的 CORS 规则。

所以我可以拥有

/api 端点具有 CORS 域白名单和

/public-api 没有 CORS 域白名单。

这是必需的,因为我有两个用于自己前端的内部端点,以及一个可以安装在任何第三方域中的公共 JS 小部件。

我看过django-cors-headers库,但它是正则表达式配置

CORS_ORIGIN_REGEX_WHITELIST = []
Run Code Online (Sandbox Code Playgroud)

致力于让来自域列表的请求通过。

就我而言,我需要一种方法来使用正则表达式(或其他方法)来让对我的端点的请求通过或不通过。

django cors django-cors-headers

7
推荐指数
1
解决办法
1511
查看次数

Django CORS问题:不允许access-control-allow-origin

我收到以下错误:

Access to XMLHttpRequest at 'http://127.0.0.1:8000/' from origin 'http://localhost:62570' has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.

我尝试添加django-cors-headers中间件,并且CORS_ALLOW_ALL_ORIGINS = True我也做了ALLOWED_HOSTS = ['*']但仍然遇到相同的 CORS 错误。我在 NestJS 中遇到了同样的错误,但添加后app.enableCors();它得到了解决。

这是我的settings.py文件:

from pathlib import Path

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
DEBUG = True

ALLOWED_HOSTS = ['*']

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware', …
Run Code Online (Sandbox Code Playgroud)

python django cors django-rest-framework django-cors-headers

7
推荐指数
1
解决办法
5773
查看次数

Django ALLOWED_HOSTS和CORS(django-cors-headers)

ALLOWED_HOSTS和CORS有什么区别。如果定义了ALLOWED_HOSTS,是否还需要定义CORS?我没有使用django模板。我还可以动态定义这两个吗?(我想不是)
我正在使用django作为后端,并且在不同的主机上使用了多个reactjs前端应用程序。

python django django-cors-headers

6
推荐指数
1
解决办法
4085
查看次数

预检请求不允许重定向

我有一个问题,尝试使用rest api时会收到响应:“ 从原始地址“ https://kollektivet.app ” 获取到' https://kollektivet.app:8082/api/login/ '的访问权限已被CORS政策阻止:对预检请求的响应未通过访问控制检查:预检请求不允许重定向。”

尝试获取时的响应图片

当我尝试使用任何其他api时,就会发生这种情况。从我所阅读的内容来看,此错误表示我正在尝试重定向,但不是。

后端是Django,看起来像这样:

    @csrf_exempt
@api_view(["POST"])
@permission_classes((AllowAny,))
def register(request,):
        password = request.data.get("password", "")
        email = request.data.get("email", "")
        if not email and not password and not email:
            return Response(
                data={
                    "message": "username, password and email is required to register a user"
                },
                status=status.HTTP_400_BAD_REQUEST
            )
        new_user = User.objects.create_user(
            email=email, password=password
        )
        return Response(status=status.HTTP_201_CREATED)
Run Code Online (Sandbox Code Playgroud)

前端处于反应状态,如下所示:

createUser(event) {
        event.preventDefault();

        let data = {
            name: this.state.name,
            password: this.state.password,
            repeatPassword: this.state.repeatPassword,
            email: this.state.email
        };

        if (this.state.name !== '' && …
Run Code Online (Sandbox Code Playgroud)

django apache2 cors reactjs django-cors-headers

6
推荐指数
1
解决办法
2万
查看次数

“http://localhost:3000”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头

我正在使用 Django 和 React 使用 Rest Framework 进行项目。我已经CORS_ALLOW_ALL_ORIGINS=True在 settings.py 中设置了,但仍然出现错误Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/encrypt/' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我正在使用 axios 来发布和获取请求。令人惊讶的是,即使发出错误后请求但获取请求失败。这是使用 axios 的 React 文件

sendImage =()=> {
     this.activateSpinner()
     let formData = new FormData()
     formData.append('to_be_hidden', this.state.files[0], this.state.files[0].name)
     formData.append('used_to_hide', this.state.files[1], this.state.files[1].name)
     axios.post('http://127.0.0.1:8000/api/encrypt/', formData, {
         headers: {
            'accept': 'application/json',
            'content-type': 'multipart/form-data'
         }
     })
     .then(resp=>{
         this.getImageClass(resp)
         console.log(resp.data.id)
     })
     .catch(err=>{
         console.log("Code broke at send image")
         console.log(err)
     }) …
Run Code Online (Sandbox Code Playgroud)

django cross-domain django-rest-framework reactjs django-cors-headers

6
推荐指数
2
解决办法
2万
查看次数

从 Vue.js 向 Django 发送 POST/DELETE 请求时禁止(未设置 CSRF cookie。)

一段时间以来,我一直在尝试从 Vue 前端向 Django 后端发送 POST 或 DELETE 请求。

我在 localhost:3000 上运行 Vue.js,在 localhost:8000 上运行 Django。我已经使用django-cors-headers设置了 CORS ,并且能够获取请求。但是,一旦我尝试删除或发布,就会收到此错误:

Forbidden (CSRF cookie not set.)

据我了解,我需要在请求标头中传递 CSRF 令牌,我有:

    deleteImage() {
      const url = this.serverURL + 'images/delete/' + this.image_data.pk;

      const options = {
        method: "DELETE",
        headers: {'X-CSRFToken': this.CSRFtoken}
      };
      fetch(url, options)
        .then(response => {
          console.log(response);
          if (response.ok){ 
            // if response is successful, do something
          }
        })
        .catch(error => console.error(error));
    }
Run Code Online (Sandbox Code Playgroud)

我从 GET 请求获取,如果我使用Django 文档this.CSRFtoken 中显示的方法,令牌是相同的。

我的姜戈settings.py看起来像这样:

rom …
Run Code Online (Sandbox Code Playgroud)

django django-csrf vue.js django-cors-headers csrf-token

6
推荐指数
1
解决办法
7930
查看次数

django cors 标头中的 corsheaders.E013 错误

我尝试打开端口以在“http://localhost:3000”处使用 django 后端作为 API

这是我的工具

CORS_ALLOWED_ORIGINS = (
    'http://localhost:3000'
)
Run Code Online (Sandbox Code Playgroud)
INSTALLED_APPS = [
    *
    'corsheaders',
]
Run Code Online (Sandbox Code Playgroud)
MIDDLEWARE = [
    *
    "corsheaders.middleware.CorsMiddleware",# new
    "django.middleware.common.CommonMiddleware", # new
    *
]
Run Code Online (Sandbox Code Playgroud)

但我不断收到这样的错误消息

django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:

ERRORS:
?: (corsheaders.E013) Origin '/' in CORS_ALLOWED_ORIGINS is missing scheme or netloc
        HINT: Add a scheme (e.g. https://) or netloc (e.g. example.com).
?: (corsheaders.E013) Origin '/' in CORS_ALLOWED_ORIGINS is missing scheme or netloc
        HINT: Add a scheme (e.g. https://) or netloc (e.g. example.com).
?: (corsheaders.E013) …
Run Code Online (Sandbox Code Playgroud)

django django-cors-headers

6
推荐指数
1
解决办法
5749
查看次数