Allauth 不会 return 所需的令牌负载

Allauth will not return the desired token payload

我有一个名为 merchant 的 django-rest-auth 项目。在其中我用 JWT 实现了 django-restauth 和 allauth 包。

一切正常。但是,我希望 return JWT 令牌中的其他字段,这是我的实现。

在app.views.py

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

serializers.py

class User_Serializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['email', 'username', 'is_staff']

settings.py

JWT_AUTH = {
'JWT_RESPONSE_PAYLOAD_HANDLER': 'merchant.coin_app.views.jwt_response_payload_handler',
'JWT_EXPIRATION_DELTA': datetime.timedelta(minutes=10),
'JWT_AUTH_HEADER_PREFIX': 'JWT'
}

负载 returned 不包含 email/is_staff。也许我遗漏了什么。

JWT_RESPONSE_PAYLOAD_HANDLER设置选项中注册的处理程序在生成JWT令牌后调用。

需要自定义的处理程序是 JWT_PAYLOAD_HANDLER,它创建了标记化的负载对象,而不是 JWT_RESPONSE_PAYLOAD_HANDLER

在您的项目设置中,配置

JWT_AUTH = {
  'JWT_PAYLOAD_HANDLER': 'merchant.coin_app.views.jwt_payload_handler',
  'JWT_EXPIRATION_DELTA': datetime.timedelta(minutes=10),
  'JWT_AUTH_HEADER_PREFIX': 'JWT'
}

那么在你看来,扩展rest_framework_jwt.utils.jwt_payload_handler

的结果
import rest_framework_jwt.utils.jwt_payload_handler as base_jwt_payload_handler

def jwt_response_payload_handler(user):
    payload = base_jwt_payload_handler(user)
    payload['user'] = User_Serializer(user).data
    return payload