updated reset-password method

This commit is contained in:
Anatoly 2019-08-23 14:35:47 +03:00
parent 2ebfc265e3
commit 1d18d654e3
2 changed files with 27 additions and 11 deletions

View File

@ -1,7 +1,7 @@
"""Serializers for account web""" """Serializers for account web"""
from django.conf import settings from django.conf import settings
from rest_framework import serializers
from django.contrib.auth import password_validation as password_validators from django.contrib.auth import password_validation as password_validators
from rest_framework import serializers
from account import models from account import models
from account import tasks from account import tasks
@ -10,20 +10,36 @@ from utils import exceptions as utils_exceptions
class PasswordResetSerializer(serializers.ModelSerializer): class PasswordResetSerializer(serializers.ModelSerializer):
"""Serializer from model PasswordReset""" """Serializer from model PasswordReset"""
email = serializers.EmailField(required=False,
write_only=True)
class Meta: class Meta:
"""Meta class""" """Meta class"""
model = models.ResetPasswordToken model = models.ResetPasswordToken
fields = ('expiry_datetime', ) fields = (
read_only_fields = [ 'email',
'expiry_datetime', )
]
def validate(self, attrs):
"""Override validate method"""
user = self.context.get('request').user
email = attrs.get('email')
if not user.is_anonymous:
attrs['user'] = user
else:
# Check user in DB
user_qs = models.User.objects.filter(email=email)
if user_qs.exists():
attrs['user'] = user_qs.first()
else:
raise utils_exceptions.UserNotFoundError()
return attrs
def create(self, validated_data, *args, **kwargs): def create(self, validated_data, *args, **kwargs):
"""Override create method""" """Override create method"""
request = self.context.get('request') user = validated_data.pop('user')
user = request.user ip_address = self.context.get('request').META.get('REMOTE_ADDR')
ip_address = request.META.get('REMOTE_ADDR')
obj = models.ResetPasswordToken.objects.create( obj = models.ResetPasswordToken.objects.create(
user=user, user=user,
ip_address=ip_address, ip_address=ip_address,

View File

@ -16,16 +16,15 @@ from rest_framework import permissions
from rest_framework import status from rest_framework import status
from rest_framework import views from rest_framework import views
from rest_framework.response import Response from rest_framework.response import Response
from account import tasks
from account import models from account import models
from account import tasks
from account.forms import SetPasswordForm from account.forms import SetPasswordForm
from account.serializers import web as serializers from account.serializers import web as serializers
from utils import exceptions as utils_exceptions from utils import exceptions as utils_exceptions
from utils.models import gm_token_generator from utils.models import gm_token_generator
from utils.views import (JWTCreateAPIView, from utils.views import (JWTCreateAPIView,
JWTGenericViewMixin, JWTGenericViewMixin)
JWTUpdateAPIView)
# Email confirmation # Email confirmation
@ -70,6 +69,7 @@ class VerifyEmailConfirmView(JWTGenericViewMixin):
# Password reset # Password reset
class PasswordResetView(JWTCreateAPIView): class PasswordResetView(JWTCreateAPIView):
"""View for resetting user password""" """View for resetting user password"""
permission_classes = (permissions.AllowAny, )
serializer_class = serializers.PasswordResetSerializer serializer_class = serializers.PasswordResetSerializer
queryset = models.ResetPasswordToken.objects.valid() queryset = models.ResetPasswordToken.objects.valid()