GM-81: Доарботать механизм авторизации при невалидированном email и изменении email
This commit is contained in:
parent
efe1539dad
commit
64b101516d
|
|
@ -181,6 +181,13 @@ class User(ImageMixin, AbstractUser):
|
|||
'domain_uri': settings.DOMAIN_URI,
|
||||
'site_name': settings.SITE_NAME})
|
||||
|
||||
@property
|
||||
def fullname(self):
|
||||
fullname = []
|
||||
if self.first_name: fullname.append(self.first_name)
|
||||
if self.last_name: fullname.append(self.last_name)
|
||||
return ' '.join(fullname)
|
||||
|
||||
|
||||
class ResetPasswordTokenQuerySet(models.QuerySet):
|
||||
"""Reset password token query set"""
|
||||
|
|
|
|||
|
|
@ -14,31 +14,39 @@ class UserSerializer(serializers.ModelSerializer):
|
|||
"""User serializer."""
|
||||
# RESPONSE
|
||||
email_confirmed = serializers.BooleanField(read_only=True)
|
||||
fullname = serializers.SerializerMethodField()
|
||||
|
||||
# REQUEST
|
||||
username = serializers.CharField(required=False)
|
||||
first_name = serializers.CharField(required=False, write_only=True)
|
||||
last_name = serializers.CharField(required=False, write_only=True)
|
||||
image = serializers.ImageField(required=False)
|
||||
cropped_image = serializers.ImageField(required=False)
|
||||
email = serializers.EmailField(required=False)
|
||||
username = serializers.CharField(required=False)
|
||||
newsletter = serializers.BooleanField(required=False)
|
||||
|
||||
class Meta:
|
||||
model = models.User
|
||||
fields = [
|
||||
'username',
|
||||
'first_name',
|
||||
'last_name',
|
||||
'fullname',
|
||||
'cropped_image',
|
||||
'image',
|
||||
'email',
|
||||
'email_confirmed',
|
||||
'username',
|
||||
'newsletter',
|
||||
]
|
||||
|
||||
def get_fullname(self, obj):
|
||||
"""Get user full name"""
|
||||
return obj.fullname
|
||||
|
||||
def validate_email(self, value):
|
||||
"""Validate email value"""
|
||||
if value == self.instance.email:
|
||||
raise serializers.ValidationError()
|
||||
if not self.instance.email_confirmed:
|
||||
raise serializers.ValidationError()
|
||||
return value
|
||||
|
||||
def validate_username(self, value):
|
||||
|
|
|
|||
|
|
@ -11,6 +11,4 @@ urlpatterns = [
|
|||
path('change-email/confirm/<uidb64>/<token>/', views.ChangeEmailConfirmView.as_view(),
|
||||
name='change-email-confirm'),
|
||||
path('confirm-email/', views.ConfirmEmailView.as_view(), name='confirm-email'),
|
||||
path('confirm-email/<uidb64>/<token>/', views.ConfirmInactiveEmailView.as_view(),
|
||||
name='inactive-email-confirm'),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -60,33 +60,6 @@ class ChangeEmailConfirmView(JWTGenericViewMixin):
|
|||
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
"""Implement GET-method"""
|
||||
uidb64 = kwargs.get('uidb64')
|
||||
token = kwargs.get('token')
|
||||
uid = force_text(urlsafe_base64_decode(uidb64))
|
||||
user_qs = models.User.objects.filter(pk=uid)
|
||||
if user_qs.exists():
|
||||
user = user_qs.first()
|
||||
if not GMTokenGenerator(GMTokenGenerator.CHANGE_EMAIL).check_token(
|
||||
user, token):
|
||||
raise utils_exceptions.NotValidTokenError()
|
||||
# Approve email status
|
||||
user.confirm_email()
|
||||
# Expire user tokens
|
||||
user.expire_access_tokens()
|
||||
user.expire_refresh_tokens()
|
||||
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
else:
|
||||
raise utils_exceptions.UserNotFoundError()
|
||||
|
||||
|
||||
class ConfirmInactiveEmailView(generics.GenericAPIView):
|
||||
"""View for confirm inactive email"""
|
||||
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
"""Implement GET-method"""
|
||||
uidb64 = kwargs.get('uidb64')
|
||||
|
|
|
|||
|
|
@ -100,8 +100,7 @@ class LoginByUsernameOrEmailSerializer(SourceSerializerMixin,
|
|||
username_or_email = attrs.pop('username_or_email')
|
||||
password = attrs.pop('password')
|
||||
user_qs = account_models.User.objects.filter(Q(username=username_or_email) |
|
||||
(Q(email=username_or_email) &
|
||||
Q(email_confirmed=True)))
|
||||
(Q(email=username_or_email)))
|
||||
if not user_qs.exists():
|
||||
raise utils_exceptions.UserNotFoundError()
|
||||
else:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user