本文主要是介绍drf-jwt登录之后返回用户对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
在登录验证之后,本想返回一个user对象到前端,可是在drf发送response的时候user对象就消失了,查看源码和文档之后才了解,drf默认只会返回token
验证对象返回User
class CustomBackend(ModelBackend):"""自定义用户验证"""def authenticate(self, username=None, password=None, **kwargs):try:user = User.objects.get(Q(username=username)|Q(mobile=username))if user.check_password(password):return userexcept Exception as e:return None
跟踪debug 会走到 jwt_response_payload_handler 方法返回一个token
drf 源码
def jwt_response_payload_handler(token, user=None, request=None):"""Returns the response data for both the login and refresh views.Override to return a custom response such as including theserialized representation of the User.Example:def jwt_response_payload_handler(token, user=None, request=None):return {'token': token,'user': UserSerializer(user, context={'request': request}).data}"""return {'token': token,# 'user': UserDetailSerializer(user, context={'request': request}).data}
我们自己可以覆盖这个方法
-
首先在Setting配置这个方法
JWT_AUTH = {
‘JWT_EXPIRATION_DELTA’: datetime.timedelta(days=7),
‘JWT_AUTH_HEADER_PREFIX’: ‘JWT’,
‘JWT_RESPONSE_PAYLOAD_HANDLER’:‘users.views.jwt_response_payload_handler’
} -
users.views里创建此方法
def jwt_response_payload_handler(token, user=None, request=None):
“”"
设置jwt登录之后返回token和user信息
“”"
return {
‘token’: token,
‘user’: UserDetailSerializer(user, context={‘request’: request}).data
}
链接:https://www.jianshu.com/p/4feddd41566f
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
这篇关于drf-jwt登录之后返回用户对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!