Curl Angular 2 Django Rest框架使用http.post进行身份验证
我花了比我想承认的更多的时间来寻找这个问题的答案,但似乎无法靠我自己找到答案。 我有一个Django rest api,可以使用httpie或curl与api通信并传递凭据。我还有一个angular 2 SPA,它可以发送http.get请求并从服务器返回数据。在我尝试使用angular 2应用程序中的POST和pass身份验证数据之前,一切都很正常,这导致了Http 403(禁止) 由于该api可以与curl一起正常工作,因此它让我觉得我在用angular发送http.post时出错了。这是我的密码:Curl Angular 2 Django Rest框架使用http.post进行身份验证,curl,angular,http-headers,django-rest-framework,Curl,Angular,Http Headers,Django Rest Framework,我花了比我想承认的更多的时间来寻找这个问题的答案,但似乎无法靠我自己找到答案。 我有一个Django rest api,可以使用httpie或curl与api通信并传递凭据。我还有一个angular 2 SPA,它可以发送http.get请求并从服务器返回数据。在我尝试使用angular 2应用程序中的POST和pass身份验证数据之前,一切都很正常,这导致了Http 403(禁止) 由于该api可以与curl一起正常工作,因此它让我觉得我在用angular发送http.post时出错了。这是我
postStuff() {
var body = "username=myusername&password=mypassword";
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
return this.http.post('http://localhost:8000/rest/', body, { headers: headers })
.map(res => res.json());
}
下面是一个效果很好的卷曲示例:
curl -H 'Accept: application/json; indent=4' -u myusername:mypassword http://127.0.0.1:8000/rest/
return this.http.get('http://127.0.0.1:8000/users/')
.map(res => res.json())
是否需要在标题中包含“授权”标题?我尝试了授权:基本,但没有成功。我还运行了一个curl来查找允许的选项,POST是允许的。
我基本上希望在http.post(或者http.get,如果可能的话)中使用curl中的“-u username:password”
还值得一提的是,在api中不需要身份验证的部分,我使用POST获得400(错误请求),而get工作正常。
例如,这很好:
curl -H 'Accept: application/json; indent=4' -u myusername:mypassword http://127.0.0.1:8000/rest/
return this.http.get('http://127.0.0.1:8000/users/')
.map(res => res.json())
这并不是:
return this.http.post('http://127.0.0.1:8000/users/', { headers: headers })
.map(res => res.json());
需要解决两个问题: 1-在角度侧,将属性设置为true:
return this.http.post('http://127.0.0.1:8000/users/',
{ headers: headers, withCredentials: true })
.map(res => res.json());
2-在Django侧把手CSRF和入口原点上:
这些和COR是它们自己的蠕虫,它们在堆栈溢出中的许多其他问题中都会得到解决