Django 休息框架 Reactjs 会话不起作用

IT技术 django reactjs session django-rest-framework session-cookies
2021-05-17 06:15:16

因此,我将 Django rest 框架设置为电子商务网站的后端 API。该网站通过 React 前端显示,该前端不由 django 后端提供服务。

我目前正在从他们的本地开发服务器(分别为http://127.0.0.1:8000http://127.0.0.1:3000运行 Django 后端和 React 前端将来,它们可能会位于不同的域中。

当我在一个视图中设置一个会话并在另一个视图中读取内容时,如果我只输入用于创建和直接读取到我的浏览器的 url(仅用于测试目的),这将起作用。但是当我通过前端访问后端时,会话无法再访问,或者似乎没有存储。会发生的情况是,在尝试访问我在先前视图中设置的数据时收到 KeyError。

我想这与我前段时间阅读过的内容有关,但我发现很难找到有关如何使用它的正确信息。这是否与具有会话 ID 的 cookie 对前端不可用,而只能对后端本身可用有关?

主要问题: 我想知道如何使用上述设置处理会话以保存购物车。

我的后端代码,以防万一有人想知道:

from django.http import HttpResponse


def cart_add(request, product_id, update, quantity):
    request.session['one'] = 'created through "cart_add" view'
    return HttpResponse("Created a session - cart_add")


def create(request):
    request.session['one'] = 'created through "read" view'
    return HttpResponse("Created a session - create")


def read(request):
    print(request.session['one'])

我删除了一些不必要的代码。

  • 使用 ajax 调用 (axios) 从 React 前端调用cart_add 视图。
  • 我通过在浏览器中直接输入它们的 url 来调用创建和读取视图。(这一切都是为了测试目的,只是在我开始编写真正的代码之前确保会话正常工作。)
2个回答

我在另一个 stackoverflow 问题中找到了解决方案。这是它的链接。

通过将以下内容添加到我的 axios 请求中,代码成功运行:

axios.get('some api url', {withCredentials: true});

因此,我对会话 id 不可用于前端的 cookie 的假设似乎是不正确的。

我还发现我可以通过在 Chrome 中打开网页来查看 cookie,然后打开开发人员工具 > 转到“应用程序”选项卡 > 单击 cookie。

这里列出了所有可用的 cookie,还显示了 sessionid cookie。

我遇到了同样的问题,通过在 axios 调用中添加 withCredentials 并没有解决我在 django 2.2.3 和 axios 0.19.0 中的问题。

如果这里的答案不适合您,请查看以下答案:)

React Django REST 框架会话不持久/工作