diff --git a/vibes_auth/graphene/mutations.py b/vibes_auth/graphene/mutations.py index e1f7d01d..011c7a84 100644 --- a/vibes_auth/graphene/mutations.py +++ b/vibes_auth/graphene/mutations.py @@ -135,25 +135,19 @@ class UpdateUser(BaseMutation): raise BadRequest(_(f"Invalid attribute format: {attribute_pair}")) for attr, value in kwargs.items(): + if attr == "password" or attr == "confirm_password": + continue if attr not in [ - "password", - "confirm_password", - ] and ( - attr - not in [ - "groups", - "user_permissions", - "phone_number", - "is_verified", - "is_staff", - "is_active", - "is_superuser", - ] - or info.context.user.has_perm("vibes_auth.change_user") - ): + "groups", + "user_permissions", + "is_verified", + "is_staff", + "is_active", + "is_superuser", + ] or info.context.user.has_perm("vibes_auth.change_user"): setattr(user, attr, value) - user.save() + user.save() return UpdateUser(user=user) diff --git a/vibes_auth/signals.py b/vibes_auth/signals.py index feee1e7d..81f866a0 100644 --- a/vibes_auth/signals.py +++ b/vibes_auth/signals.py @@ -1,3 +1,4 @@ +from django.db import transaction from django.db.models.signals import post_save, pre_save from django.dispatch import receiver @@ -7,17 +8,24 @@ from vibes_auth.utils.emailing import send_verification_email_task @receiver(post_save, sender=User) def send_verification_email_signal(instance, created, **kwargs): - if created: - send_verification_email_task.delay(instance.pk) + if not created: + return + + send_verification_email_task.delay(instance.pk) @receiver(pre_save, sender=User) def send_user_verification_email(instance, **kwargs): - if instance.pk: - try: - old_instance = User.objects.get(pk=instance.pk) - if old_instance.email != instance.email: - instance.is_active = False - send_verification_email_task.delay(instance.pk) - except User.DoesNotExist: - pass + if not instance.pk: + return + + try: + old = User.objects.get(pk=instance.pk) + except User.DoesNotExist: + return + + if old.email != instance.email: + instance.is_active = False + transaction.on_commit( + lambda: send_verification_email_task.delay(instance.pk) + )