我正在尝试通过Django-Rest-Framework API从React中构建的表单发布数据,并且遇到了身份验证问题。如果我关闭API视图上的身份验证,我可以发布罚款,所以我认为我已经将其缩小到如何在表单中传递数据。
我的DRF视图如下所示:
class PropertyListCreate(generics.ListCreateAPIView):
authentication_classes = (SessionAuthentication,)
permission_classes = (IsAuthenticated,)
queryset = models.Property.objects.all()
serializer_class = serializers.PropertySerializer
提交的处理程序在下面。
handleSubmit = e => {
e.preventDefault();
const { name, type, address, city, state, zip_code } = this.state;
const property = { name, type, address, city, state, zip_code };
const conf = {
credentials: 'include',
method: 'POST',
body: JSON.stringify(property),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRFToken': cookie.load('csrftoken')
}
};
fetch(this.props.endpoint, conf).then(response =>
console.log(response),
console.log(conf)
);
};
当我尝试使用上面的代码发布时,我得到400错误 - 如果我删除'X-CSRFToken':cookie.load('csrftoken'),我得到403错误(禁止)。我对400错误的理解是请求格式错误,所以我认为我正在错误地发送csrf令牌?
这是console.log(响应)的输出:
Response {type: "basic", url: "http://127.0.0.1:8000/api/properties/",
redirected: false, status: 400, ok: false, …}
从标题中删除X-CSRFToken后的响应:
Response {type: "basic", url: "http://127.0.0.1:8000/api/properties/",
redirected: false, status: 403, ok: false, …}