【问题标题】:Django rest framework, JWT and request.sessionDjango REST 框架、JWT 和 request.session
【发布时间】:2015-08-13 07:56:38
【问题描述】:

我使用 Django REST 框架和 JWT 进行身份验证,一切正常,但是...... 我需要在登录时将有关用户的信息保存在会话变量中,我真的不知道在哪里可以做 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
  }

但它不起作用......

有什么想法吗?

【问题讨论】:

    标签: django session session-variables django-rest-framework jwt


    【解决方案1】:

    request.sessionDjango's session framework 管理,这需要使用会话 cookie 并且是 SessionAuthentication 的强大功能。

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

    【讨论】:

    • 所以如果我的所有数据都依赖于用户表中的“office_id”,那么使用 JWT 我必须在其他请求之前请求我的用户表?
    • 我相信 JWT 已经引用了 User,但是是的,您必须这样做。
    【解决方案2】:

    试试这个

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 2019-02-25
      • 2018-11-19
      • 2019-03-01
      • 2021-12-21
      • 2020-10-21
      • 2019-07-11
      • 2016-06-27
      • 2018-10-17
      相关资源
      最近更新 更多