है कि गुजरती हैं।
एक कस्टम सीरियलाइज़र जो JSONWebTokenSerializer को विरासत में रखता है, 'username_field' का नाम बदलता है और def मान्य() विधि ओवरराइड करता है।
यह 'username_or_email' और 'पासवर्ड' फ़ील्ड के लिए पूरी तरह से काम करता है जहां उपयोगकर्ता अपना उपयोगकर्ता नाम या ईमेल दर्ज कर सकता है और सही क्रेडेंशियल के लिए JSONWebToken प्राप्त कर सकता है।
class CustomJWTSerializer(JSONWebTokenSerializer):
username_field = 'username_or_email'
def validate(self, attrs):
password = attrs.get("password")
user_obj = User.objects.filter(email=attrs.get("username_or_email")).first() or User.objects.filter(username=attrs.get("username_or_email")).first()
if user_obj is not None:
credentials = {
'username':user_obj.username,
'password': password
}
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 log in 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)
else:
msg = _('Account with this email/username does not exists')
raise serializers.ValidationError(msg)
urls.py में:
url(r'{Your url name}$', ObtainJSONWebToken.as_view(serializer_class=CustomJWTSerializer)),
स्रोत
2017-09-13 07:55:21
अच्छी तरह से किया @ शिखर-थपलियाल –
@OhadtheLad धन्यवाद :) –