Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class UserLoginSerializer(ModelSerializer):
- user_id = IntegerField(read_only=True)
- token = CharField(allow_blank=True, read_only=True)
- username = CharField(required=False, allow_blank= True)
- email = EmailField(label='Email Address', required=False, allow_blank= True)
- class Meta:
- model = User
- fields = [
- 'user_id',
- 'username',
- 'email',
- 'password',
- 'token',
- ]
- extra_kwargs = {"password": {"write_only": True}}
- def validate(self, data):
- user_obj = None
- email = data.get("email", None)
- username = data.get("username", None)
- password = data["password"]
- if not email and not username:
- raise ValidationError("A username or email is required to login.")
- user = User.objects.filter(
- Q(email=email) |
- Q(username=username)
- ).distinct()
- user = user.exclude(email__isnull=True).exclude(email__iexact='')
- if user.exists() and user.count() == 1:
- user_obj = user.first()
- else:
- raise ValidationError("This username/email is not valid!")
- if user_obj:
- if not user_obj.check_password(password):
- raise ValidationError("Incorrect credentials, please try again!")
- data["token"] = "SOME RANDOM TOKEN"
- data["user_id"] = user_obj.id
- return data
- from rest_framework_jwt.views import obtain_jwt_token
- urlpatterns = [
- # ...
- url(r'^api-token-auth/', obtain_jwt_token),
- ]
Add Comment
Please, Sign In to add comment