【发布时间】:2021-06-18 08:42:48
【问题描述】:
我正在尝试在后端使用 Django 和 DRF 并在前端使用 ReactJs 构建一个 Web 应用程序,我想将它们分开(即避免服务器端渲染)。出于身份验证目的,我想使用 JWT我正在为此使用 djangorestframework-jwt。我在几个地方读过它,将 JWT 存储在本地存储中是不安全的,所以我试图为此使用 HttpOnly cookie。可以通过覆盖项目JWT_AUTH = { 'JWT_AUTH_COOKIE': '<cookie name>', } 的 settings.py 文件中的 drf-jwt 包的以下默认设置来配置 django 服务器发送 HttpOnly 来实现这一点,默认情况下设置为 none。服务器按预期发送 httpOnly cookie,但我面临一些问题:
1.同域约束
我知道 httpOnly cookie 不会附加到请求标头,除非请求是向托管在某个域上的服务器发出的。在我的情况下,我将 localhost:8000 用于 django,localhost:3000 用于我的 react 项目,因此浏览器不会附加 cookie,因为请求是针对不同的端口。我尝试同时在端口 3000 上运行这两个应用程序,并且浏览器确实在标头中附加了 cookie,并且我确实从服务器获得了 302 响应。然而,由于域冲突,它为各种问题打开了大门。我认为我可以使用 nginx 反向代理或类似的东西解决这个问题,但我不确定。请指导我如何在开发过程中在同一主机上同时提供这两个应用程序。
2。令牌刷新问题
当我参考视图设置来刷新令牌时,即使浏览器确实在请求标头中附加了 cookie,我也会遇到错误的请求错误。这是浏览器中的服务器响应
{"token":["This field is required."]}
感谢您一路阅读!
【问题讨论】:
标签: django django-rest-framework jwt django-rest-framework-jwt django-rest-framework-simplejwt