我正在使用Django和Nextjs创建JWT身份验证。我可以实现注册和登录功能,我可以通过登录获得accessToken。
然而,响应头是Set-Cookie设置在浏览器(Chrome,Safari,Firefox),即使有一个cookie。
可能的原因是什么?
https://github.com/Git-Port/django-next
响应头
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://localhost:3000
Allow: POST, OPTIONS
Content-Length: 715
Content-Type: application/json
Cross-Origin-Opener-Policy: same-origin
Date: Tue, 11 Jan 2022 04:34:59 GMT
Referrer-Policy: same-origin
Server: Werkzeug/2.0.2 Python/3.9.7
Set-Cookie: jwt-auth=〇〇; expires=Tue, 11 Jan 2022 05:34:59 GMT; HttpOnly; Max-Age=3600; Path=/; SameSite=None; Secure
Set-Cookie: csrftoken=〇〇; expires=Tue, 10 Jan 2023 04:34:59 GMT; Max-Age=31449600; Path=/; SameSite=None; Secure
Set-Cookie: sessionid=〇〇; expires=Tue, 25 Jan 2022 04:34:59 GMT; HttpOnly; Max-Age=1209600; Path=/; SameSite=None; Secure
Vary: Accept, Cookie, Origin
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
环境
Django==4.0.1
Nextjs
服务器域https://127.0.0.1:8000
前域https://localhost:3000
settings.py首页|Django
CORS_ALLOW_ALL_ORIGINS = False
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
'http://127.0.0.1:3000',
'http://localhost:3000',
'https://127.0.0.1:3000',
'https://localhost:3000',
]
index.js|下
const login = async (data) => {
const res = await axios.post("https://127.0.0.1:8000/api/auth/login/", data, {withCredentials: true})
};
1条答案
按热度按时间vxbzzdmp1#
我看了你的代码,我认为问题是不同的域。带有httponly的cookie只能在同一个域名上发送。所以在你的例子中,你在“localhost”上有frontend/next,在“www.example.com“上有backend/server127.0.0.1。如果你把两者都改为“localhost”或都改为“127.0.0.1”,它应该可以工作。
另外请注意,在生产中也是这种情况,因此您需要从与下一个应用程序相同的域提供API。