Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django.contrib.auth import authenticate, get_user_model
- from django.core.exceptions import ObjectDoesNotExist
- from django.utils.translation import ugettext as _
- from rest_framework import serializers
- from rest_framework_jwt.serializers import JSONWebTokenSerializer
- from rest_framework_jwt.settings import api_settings
- import jwt
- jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
- jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
- jwt_decode_handler = api_settings.JWT_DECODE_HANDLER
- jwt_get_username_from_payload = api_settings.JWT_PAYLOAD_GET_USERNAME_HANDLER
- class CustomJWTSerializer(JSONWebTokenSerializer):
- def validate(self, attrs):
- # get username and password
- username = attrs.get('username')
- password = attrs.get('password')
- # if both exist
- if username and password:
- #change username to all lowercase
- username = username.lower()
- # check if the user exists
- try:
- # rudimentary way to check if it's an email or username
- if '@' in username:
- us = User.objects.get(email=username)
- else:
- us = User.objects.get(username=username)
- except ObjectDoesNotExist:
- msg = _('no such user with such credentials.')
- raise serializers.ValidationError(msg)
- # check username/password combination
- user = authenticate(username=us.username, password=attrs.get('password'))
- if user:
- if not user.is_active:
- msg = _('User account is disabled.')
- raise serializers.ValidationError(msg)
- # generate jwt payload with token
- payload = jwt_payload_handler(user)
- return {
- 'token': jwt_encode_handler(payload),
- 'user': user,
- 'permissions':user.get_all_permissions(),
- }
- else:
- msg = _('Unable to log in with provided credentials.')
- print(user)
- raise serializers.ValidationError(msg)
- else:
- msg = _('Must include "{username_field}" and "password".')
- msg = msg.format(username_field=self.username_field)
- raise serializers.ValidationError(msg)
Add Comment
Please, Sign In to add comment