diff --git a/server/proj/account/views.py b/server/proj/account/views.py index 0912ecd..afe6cbf 100644 --- a/server/proj/account/views.py +++ b/server/proj/account/views.py @@ -11,9 +11,15 @@ from account.serializers import MyUserSerializer, MyTokenObtainPairSerializer from account.models import MyUser from .schemas import UpdateUserSchema from conf.settings.base import MIN_LEN_PASSWORD +from django.core.exceptions import ValidationError +from django.core.validators import validate_email PermissionClass = IsAuthenticated if not settings.DEBUG else AllowAny + + + + class MyTokenObtainPairView(TokenObtainPairView): permission_classes = [AllowAny] serializer_class = MyTokenObtainPairSerializer @@ -59,24 +65,30 @@ class MyUserViewSet(ViewSet): @action(detail=False, methods=['post'], schema=UpdateUserSchema()) def update_user(self, request): password = request.user.password - - if request.data['password'] == request.data['email']: - return Response( - {'detail': 'Почта не может являться паролем', 'error': {'email': 'Почта не может являться паролем'}}, - status=status.HTTP_400_BAD_REQUEST) - - if len(request.data['password']) < MIN_LEN_PASSWORD: - return Response( - {'detail': 'Минимальная длина - 8 символов', 'error': {'email': 'Минимальная длина - 8 символов'}}, - status=status.HTTP_400_BAD_REQUEST) - - if check_password(request.data['password'], password): - return Response( - {'detail': 'Пароли одинаковые', 'error': {'email': 'Пароли одинаковые'}}, - status=status.HTTP_400_BAD_REQUEST) if check_password(request.data['old_password'], password): + try: + validate_email(request.data['password']) + except ValidationError as e: + pass + else: + return Response( + {'detail': 'Почта не может являться паролем', 'error': {'email': 'Почта не может являться паролем'}}, + status=status.HTTP_400_BAD_REQUEST) + + if len(request.data['password']) < MIN_LEN_PASSWORD: + return Response( + {'detail': 'Минимальная длина - 8 символов', 'error': {'email': 'Минимальная длина - 8 символов'}}, + status=status.HTTP_400_BAD_REQUEST) + + + if check_password(request.data['password'], password): + return Response( + {'detail': 'Пароли одинаковые', 'error': {'email': 'Пароли одинаковые'}}, + + + status=status.HTTP_400_BAD_REQUEST) if 'email' in request.data: del request.data['email'] if 'password' in request.data: diff --git a/server/proj/conf/settings/__init__.py b/server/proj/conf/settings/__init__.py index af012d0..ac5e714 100644 --- a/server/proj/conf/settings/__init__.py +++ b/server/proj/conf/settings/__init__.py @@ -1,4 +1,3 @@ - from .local import * diff --git a/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc b/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc index e00d729..10a15ec 100644 Binary files a/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc and b/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc differ