Guest User

Untitled

a guest
Feb 7th, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. from django.contrib.auth import authenticate, get_user_model
  2. from django.core.exceptions import ObjectDoesNotExist
  3. from django.utils.translation import ugettext as _
  4. from rest_framework import serializers
  5. from rest_framework_jwt.serializers import JSONWebTokenSerializer
  6. from rest_framework_jwt.settings import api_settings
  7.  
  8. import jwt
  9.  
  10. jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
  11. jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
  12. jwt_decode_handler = api_settings.JWT_DECODE_HANDLER
  13. jwt_get_username_from_payload = api_settings.JWT_PAYLOAD_GET_USERNAME_HANDLER
  14.  
  15. class CustomJWTSerializer(JSONWebTokenSerializer):
  16. def validate(self, attrs):
  17. # get username and password
  18. username = attrs.get('username')
  19. password = attrs.get('password')
  20.  
  21. # if both exist
  22. if username and password:
  23.  
  24. #change username to all lowercase
  25. username = username.lower()
  26.  
  27. # check if the user exists
  28. try:
  29. # rudimentary way to check if it's an email or username
  30. if '@' in username:
  31. us = User.objects.get(email=username)
  32. else:
  33. us = User.objects.get(username=username)
  34. except ObjectDoesNotExist:
  35. msg = _('no such user with such credentials.')
  36. raise serializers.ValidationError(msg)
  37.  
  38. # check username/password combination
  39. user = authenticate(username=us.username, password=attrs.get('password'))
  40.  
  41. if user:
  42. if not user.is_active:
  43. msg = _('User account is disabled.')
  44. raise serializers.ValidationError(msg)
  45.  
  46. # generate jwt payload with token
  47. payload = jwt_payload_handler(user)
  48.  
  49. return {
  50. 'token': jwt_encode_handler(payload),
  51. 'user': user,
  52. 'permissions':user.get_all_permissions(),
  53. }
  54. else:
  55. msg = _('Unable to log in with provided credentials.')
  56. print(user)
  57. raise serializers.ValidationError(msg)
  58. else:
  59. msg = _('Must include "{username_field}" and "password".')
  60. msg = msg.format(username_field=self.username_field)
  61. raise serializers.ValidationError(msg)
Add Comment
Please, Sign In to add comment