在 django-rest-framework-jwt 中存储超过默认信息

Store more than default information in django-rest-framework-jwt

我正在使用 Django 版本 1.8 并使用 django-rest-framework-jwt 进行身份验证。 身份验证后,我们的应用程序将 return 向前端提供信息:

from rest_framework_jwt.settings import api_settings
from rest_framework.response import Response
from django.contrib.auth.models import User


jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER

user.profile_picture = "test_profile_picture.jpg" #user is django.contrib.auth.models.User object
payload = jwt_payload_handler(user) 
token = jwt_encode_handler(payload)

 jwt_login_response = {
        "token": token
 }

return Response(jwt_login_response,status=status.HTTP_200_OK)

在前端,我们将通过

解码
import jwtDecode from 'jwt-decode';
var decodedToken = jwtDecode(token);

但目前 decodedToken 只包含 django-rest-framework-jwt 的默认值

Object {username: "test", user_id: 9, email: "test@gmail.com", exp: 1454754137}

我想像 profile_picture 一样在 jwt 中存储更多信息,但我不知道如何。我真的很想找到解决这个问题的方法。

您可以使用 JWT_PAYLOAD_HANDLER setting 覆盖附加到令牌的负载。

默认实现包括 usernameuser_idemailexp(过期时间),如您所见。您可以找到默认实现 on GitHub.

我认为您需要的是自定义用户模型。您可以通过使用您需要的字段创建一个新模型并通过一对一关系将其引用到默认用户模型来创建它。

这个 link 可能会有帮助 - http://blog.mathandpencil.com/replacing-django-custom-user-models-in-an-existing-application/