Django Angular cors error: access-control-allow-origin not allowed
Django Angular cors error: access-control-allow-origin not allowed
我已经使用 django-rest-auth 在我的 django 应用程序中实现了身份验证。我在 settings.py 中的设置:
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'rest_auth',
'django.contrib.sites',
'allauth',
'allauth.account',
'rest_auth.registration',
'corsheaders',
'rest_framework_docs',
'tasks'
]
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',
]
ROOT_URLCONF = 'urls'
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
ALLOWED_HOSTS = ['*']
SITE_ID = 1
我从我的前端登录 - 我收到了一个存储在我本地存储中的令牌。现在我发出一个简单的 GET 请求,如下所示:
getTasks(): Observable<Task[]> {
let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
let options = new RequestOptions({ headers: headers, withCredentials: true });
return this.http.get(this.taskUrl, options)
.map(this.extractData)
.catch(this.handleError);
}
但它给了我:Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response.
尽管我包含了 withCredentials。
我做错了什么?
P.S:如果我从 POST 中删除选项,则没有错误,但我得到的数据不正确,因为我的后端 returns 数据对于特定用户。
去掉这一行,
let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
来自您的 getTasks()
函数。您不需要向服务器指定这些选项。 django-cors-headers
负责。
我已经使用 django-rest-auth 在我的 django 应用程序中实现了身份验证。我在 settings.py 中的设置:
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'rest_auth',
'django.contrib.sites',
'allauth',
'allauth.account',
'rest_auth.registration',
'corsheaders',
'rest_framework_docs',
'tasks'
]
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',
]
ROOT_URLCONF = 'urls'
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
ALLOWED_HOSTS = ['*']
SITE_ID = 1
我从我的前端登录 - 我收到了一个存储在我本地存储中的令牌。现在我发出一个简单的 GET 请求,如下所示:
getTasks(): Observable<Task[]> {
let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
let options = new RequestOptions({ headers: headers, withCredentials: true });
return this.http.get(this.taskUrl, options)
.map(this.extractData)
.catch(this.handleError);
}
但它给了我:Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response.
尽管我包含了 withCredentials。
我做错了什么?
P.S:如果我从 POST 中删除选项,则没有错误,但我得到的数据不正确,因为我的后端 returns 数据对于特定用户。
去掉这一行,
let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
来自您的 getTasks()
函数。您不需要向服务器指定这些选项。 django-cors-headers
负责。