我在网上发现,我们可以通过在我们的url中包含这个来覆盖JSONWebTokenSerializer
url(r'^login/', ObtainJSONWebToken.as_view(serializer_class=CustomJWTSerializer)),
在我看来
class CustomJWTSerializer(JSONWebTokenSerializer):
def __init__(self, *args, **kwargs):
super(JSONWebTokenSerializer, self).__init__(*args, **kwargs)
self.fields['email'] = serializers.CharField()
self.fields['password'] = PasswordField(write_only=True)
def validate(self, attrs):
credentials = {
'username': attrs.get('email'),
'password': attrs.get('password')
}
print(credentials)
if all(credentials.values()):
user = authenticate(**credentials)
if user:
if not user.is_active:
msg = _('User account is disabled.')
raise serializers.ValidationError(msg)
payload = jwt_payload_handler(user)
return {
'token': jwt_encode_handler(payload),
'user': user
}
else:
msg = _('Unable to login with provided credentials.')
raise serializers.ValidationError(msg)
else:
msg = _('Must include "{username_field}" and "password".')
msg = msg.format(username_field=self.username_field)
raise serializers.ValidationError(msg)
有了这个,我可以开始重写原始对象,但不知何故,返回对象始终只是令牌。在
不知怎么的,我找不到它是从哪里产生的,看起来确实是因为
^{pr2}$即使这样,用户返回的不仅仅是令牌。
我甚至尝试取出整个返回值并得到return{}
,但是如果有正确的凭证,它仍然返回类似{"token": null}
的内容
我甚至尝试过使用return Response({})
,但它从哪里得到{user object
作为响应?我使用了print (user)
,但它确实存在,而且是有效的
您可以使用附加设置-JWT_RESPONSE_PAYLOAD_HANDLER-在json响应中返回密钥和用户。请参阅文档http://getblimp.github.io/django-rest-framework-jwt/,这里有一个使用JWT_RESPONSE_PAYLOAD_处理程序的示例。在
这是我的代码示例:
在设置.py在
在后面/视图.py在
^{pr2}$相关问题 更多 >
编程相关推荐