我有一个django后端,我启用了Cross origin请求,如下所示:
INSTALLED_APPS = [
..
'corsheaders',
]
MIDDLEWARE = [
'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',
'django.middleware.security.SecurityMiddleware',
'corsheaders.middleware.CorsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL = True
我没有实施任何身份验证。我只是试图点击一个API端点并尝试在我的Angular2前端获取数据。
我在Django后端实现了一个基于会话的购物车,用于存储我的产品(https://github.com/lazybird/django-carton)。当我通过可浏览的api点击http://127.0.0.1:8000/api/shopping-cart/show/时,它给了我
{"1":{"product_pk":1,"price":"23000.00000","quantity":3},"2":{"product_pk":2,"price":"34000.00000","quantity":7},"4":{"product_pk":4,"price":"450.00000","quantity":1}}
然而,当我尝试从我的Angular2服务中获取相同的URL时:它会引发错误:
XMLHttpRequest cannot load http://127.0.0.1:8000/api/shopping-cart/show/. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:3000' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.
我的服务电话如下:
private myUrl: string = 'http://127.0.0.1:8000/api/shopping-cart/'
showCart(){
return this.http.get(this.myUrl + 'show' + '/', {withCredentials:true})
.toPromise()
.then(response => response.json())
}
注意:如果我删除{withCredentials:true},则它不会发送sessionid或csrftoken并返回{}但错误消失。我做错了什么?
答案 0 :(得分:1)
在我的Django设置中,我必须添加:
CORS_ALLOW_CREDENTIALS= True
答案 1 :(得分:0)
AFAIK如果您使用withCredentials: true
,则无法将*
用于Access-Control-Allow-Origin
,但需要使用http://localhost:3000
。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Origin
Access-Control-Allow-Origin: <origin> | *
origin参数指定可以访问资源的URI。浏览器必须强制执行此操作。对于没有凭据的请求,服务器可以将“*”指定为通配符,从而允许任何源访问资源。
答案 2 :(得分:0)
您的中间件订单问题。试试这个
library(dplyr)
df1 %>%
group_by(grp =cumsum(c(TRUE, diff(chamber)< 0)) ) %>%
mutate(cycle = format(first(date), "%Y%m%d%H%M")) %>%
ungroup() %>%
select(-grp)
请注意,CorsMiddleware需要在Django的CommonMiddleware
之前出现答案 3 :(得分:0)
您可以使用angular2集成代理。
写道:
{ “/ api / shopping-cart /”:{ “目标”:“http://localhost:8000”, “安全”:错误 } }
将“start”脚本更改为: “start”:“ng serve --proxy-config proxy.conf.json”