Curl Angular 2 Django Rest框架使用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时出错了。这是我

我花了比我想承认的更多的时间来寻找这个问题的答案,但似乎无法靠我自己找到答案。 我有一个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是它们自己的蠕虫,它们在堆栈溢出中的许多其他问题中都会得到解决