我正在将Next.js用于客户端,将django用于api服务器。 Next.js:127.0.0.1:3000 django:127.0.0.1:8000
问题
当使用axios将GET请求发送到api服务器时,不会设置cookie。该Cookie是由api发送的,在浏览器中设置为httpOnly。
源代码
像这样发送GET请求:
const auth = axios.create({
baseURL: 'http://127.0.0.1:8000/api/v1/auth',
headers: { 'Content-Type': 'application/json' },
withCredentials: true
})
const { data } = await auth.get('/test/')
关于CORS的django设置:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
'127.0.0.1:3000'
)
CORS_ALLOW_CREDENTIALS = True
我尝试过的事情
首先,我检查api服务器是否收到请求
const { data } = await auth.get('/user/', {
headers: {
Cookie: `token=${token}`
}
})
当我如上所述手动附加cookie时,它可以工作。我可以检查该请求。COOKIES在django中有cookie。
可以肯定的是,我还通过Postman发送了带有cookie的GET请求,它起作用了。 django拿到了饼干。
然后,我认为axios可能有一些问题。所以我尝试了fetch,isomorphic-fetch和isomorphic-unfetch。但这没用。
最后,这些是django请求的结果摘录。当通过Postman和axios发送每个请求时,META。
Postman
'HTTP_CACHE_CONTROL': 'no-cache',
'HTTP_POSTMAN_TOKEN': '9077175d-4da7-4196-b2c6-3ef0b04568f9',
'HTTP_USER_AGENT': 'PostmanRuntime/7.6.0',
'HTTP_ACCEPT': '*/*',
'HTTP_HOST': '127.0.0.1:8000',
'HTTP_COOKIE': 'token=179780f7ca388ae1dec47f5dee717a4b7cb5848e0c21b68b2a5715e62115570b',
'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
'HTTP_CONNECTION': 'keep-alive'
axios
'HTTP_ACCEPT': 'application/json, text/plain, */*',
'HTTP_USER_AGENT': 'axios/0.18.0',
'HTTP_HOST': '127.0.0.1:8000',
'HTTP_CONNECTION': 'close'