当我尝试使用Axios请求中包含的凭据或Postman应用程序向服务器上托管的Django应用程序发送POST请求时,我无法访问应用程序中的cookie,因为cookie从未发送。
Axios配置看起来像这样:
export function genericApiHost(host: string) {
const headers = {
"Content-Type": "application/json",
Accept: "application/json",
// "Access-Control-Allow-Origin": true,
};
return axios.create({
baseURL: `${host}`,
headers: headers,
withCredentials: true,
});
}
字符串
如果我包含allow origin头,我会得到一个CORS错误,否则,cookie不会发送。
这是Django应用设置的一部分:
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_CREDENTIALS = True
CSRF_COOKIE_SECURE = False
CSRF_COOKIE_HTTPONLY = False
CSRF_TRUSTED_ORIGINS = ['*']
ALLOWED_HOSTS = ["*"]
型
使用我在这里列出的设置,应用程序可以在本地正常工作,但当代码上传到nginx服务器时,它无法工作
1条答案
按热度按时间kr98yfug1#
根据您提供的信息,您在使用凭据发送POST请求时似乎无法访问Django应用程序中的Cookie。您提到Cookie永远不会发送,您无法访问它们。您还提到如果包含allow origin头,则会收到CORS错误,如果不包含它,则不会发送Cookie。
您已经将
CORS_ALLOW_ALL_ORIGINS
和CORS_ALLOW_CREDENTIALS
设置为True
,并将CSRF_COOKIE_SECURE
、CSRF_COOKIE_HTTPONLY
、CSRF_TRUSTED_ORIGINS
和ALLOWED_HOSTS
分别设置为False
、False
、['*']
和["*"]
。这些设置在本地可以正常工作,但当您将代码上传到nginx服务器时,它不起作用。根据您的描述,您可能遇到了CORS问题。您所提到的错误信息表明,浏览器由于SameSite属性而阻止了cookie。该属性默认设置为Lax,这将阻止cookie在跨站请求中发送。为了解决此问题,你需要更新cookie的属性。下面是一个如何在Django中设置cookie的例子:
字符串
您也可以尝试在Django应用程序设置中将
CSRF_COOKIE_SECURE
和CSRF_COOKIE_HTTPONLY
设置为True
。此外,您可能需要检查您的服务器是否设置了Access-Control-Allow-Origin
头。如果没有,您可以将其添加到服务器配置中以允许跨域请求。