我的目标是将POST请求从second.com
发送到first.com
。而且我需要保护Django服务器(first.com
)的安全,以允许并授权POST请求并响应second.com(Javascript client
)
我目前的计划是通过制作GET方法从first.com获取csrf令牌。
def api_token(request):
csrfmiddlewaretoken = get_token(request)
return JsonResponse({'status': True, 'csrfmiddlewaretoken': csrfmiddlewaretoken})
然后将方法发布到first.com以获得响应。
def api_res(request):
return JsonResponse({'status': True})
这是我的js代码,
fetch("http://first.com/api/res/", {
method: 'post',
headers: {
"X-CSRFToken": response.csrfmiddlewaretoken,
"Accept": "application/json",
"Content-Type": "application/json",
"credentials": "include"
},
body: JSON.stringify({"hello": "what"})
})
.then(res => res.json())
.then(response => console.log(response))
没有错误,但api / res端点结果不起作用。意思是我在chrome开发工具中得到了Request Method: OPTIONS
。请有人解释发生了什么事吗?
这是我的Djago cors设置。
CORS_ORIGIN_WHITELIST = (
'second.com'
)
CSRF_TRUSTED_ORIGINS = [
"second.com",
]
CORS_ALLOW_METHODS = (
'GET',
'POST',
)
CORS_ALLOW_CREDENTIALS = True