Django 休息框架、JWT 和 request.session

Django rest framework, JWT and request.session

我使用带有 JWT 的 Django rest 框架进行身份验证,一切正常,但是... 我需要在登录时在会话变量中保存有关用户的信息,我真的不知道我可以在哪里做 request.session['mydata'] = plop

我试过了:

def jwt_response_payload_handler(token, user=None, request=None):
  serializedUser = UserSerializer(user).data
  request.session['mydata'] = serializedUser.mydata
  return {
    'token': token,
    'user': serializedUser
  }

但是不行...

有什么想法吗?

request.session 通过 Django's session framework 进行管理,这需要使用会话 cookie,并且是 SessionAuthentication.

的动力

JWT 完全独立于会话身份验证,并且不提供在令牌上存储任意数据的方法。

试试这个

def jwt_response_payload_handler(token, user=None, request=None):
    return {
        'token': token,
        'user': UserSerializer(
            user,
            context={
                'request': request
            },
        ).data
    }

您添加到 UserSerializer 的任何字段都将与令牌一起包含在响应中。

然后您可以使用它将信息与令牌一起存储在 localstorage 中,以便您的 SPA 可以使用它,而不必每次都进行单独的调用。

与文档的唯一区别是添加了 context={'request': request},,这可能是自编写 JWT 文档以来 DRF 发生变化的结果。