Django REST 框架、JWT 和 request.session
Posted
技术标签:
【中文标题】Django REST 框架、JWT 和 request.session【英文标题】:Django rest framework, JWT and 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
但它不起作用......
有什么想法吗?
【问题讨论】:
【参考方案1】:request.session
由 Django'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 发生变化的结果。
【讨论】:
以上是关于Django REST 框架、JWT 和 request.session的主要内容,如果未能解决你的问题,请参考以下文章
ANDROID VOLLEY + JWT TOKEN 认证 + DJANGO REST 框架