会话ID和CSRFToken问题

时间:2018-08-02 14:29:22

标签: python django session-variables session-cookies django-csrf

我要设计的API需要以下功能:

步骤1. GET / login /应该返回带有csrftoken和会话ID的响应。

STEP2。用户可以通过发送POST / login /(带有csrftoken和会话ID作为标题)和csrfmiddlewaretoken以及表单参数来执行登录。

STEP3。成功登录后,POST / login /响应将包含一个新的会话ID,该会话ID将沿着标头发送以用于将来的请求,并向服务器证明用户已登录。

STEP4。对于其他API POST应用,将使用在步骤3中获得的会话ID和在步骤1中获得的csrftoken。

我无法实现此行为。 Django不返回GET / login /的会话ID,因此我可以通过在/ login / views.py中添加以下内容来实现此目的:

if hasattr(request, 'session') and not request.session.session_key:
    request.session.save()
    request.session.modified = True

这成功返回了GET / login /的会话ID,稍后当我为POST / login /调用authenticate(user,passwd)时,会话ID被重置。

现在,我的问题:

  1. 在身份验证之前启用会话ID并确保会话ID在成功身份验证后重置的正确方法是什么?

  2. 我注意到在调用authenticate()时csrftoken被重置。成功通过身份验证后,如何保留在前面提到的STEP 1中发送的相同csrftoken,以在以后的POST请求中使用。

0 个答案:

没有答案