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
我有一个名为 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