Ich fand online, dass wir ich habe url(r'^login/', ObtainJSONWebToken.as_view(serializer_class=CustomJWTSerializer)),
und in Anbetracht, indem diese in unsere urlWarum überschreibt resetful JSONWebTokenSerializer nur Token zurückgeben? Python
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)
Damit kann ich starten Sie das Original überschreiben, aber irgendwie das Rückgabeobjekt ist immer JSONWebTokenSerializer sind in der Lage außer Kraft setzen nur das Token.
Irgendwie konnte ich nicht finden, wo es erzeugt wird, sieht es aus wie es mit diesem wegen
return {
'token': jwt_encode_handler(payload),
'user': user
}
Auch ist, Benutzer nicht nur die Token zurückgegeben wird. Ich versuchte sogar, die ganze Rückkehr herausgenommen und habe return{}
aber mit dem richtigen Berechtigungsnachweis, es gibt immer noch so etwas wie {"token": null}
Ich habe sogar versucht return Response({})
verwenden, aber nach wie vor, wo es die {"token": null}
davon ab, und warum ist es nicht meine user object
zeigt als Antwort obwohl? Ich benutzte print (user)
und sicher existiert es, dass es gültig ist
Bitte schreiben Sie, was wollen Sie archivieren. – Raz
@Raz Ich möchte das Benutzerobjekt nicht nur das Token zurückgeben – Dora
Überschreiben von JSONWebTokenSerializer ist nicht was Sie wollen. Sie müssen Ihren eigenen Antwort-Payload-Handler verwenden. Lies @hairetdin Antwort und akzeptiere es als Lösung, denn es ist so. Ich bin nicht sicher, ob sein Code funktioniert, aber das Prinzip ist richtig. – Silko