Browse Source

fix(account): make device_id optional in user registration and update user verification logic

- Changed device_id field in UserRegisterSerializer to be optional.
- Updated UserVerifyView to handle device_id more gracefully, allowing for None values and adjusting user creation logic accordingly.
master
mortezaei 8 months ago
parent
commit
55e808e15a
  1. 4
      apps/account/serializers/user.py
  2. 16
      apps/account/views/user.py

4
apps/account/serializers/user.py

@ -42,7 +42,7 @@ class UserProfileSerializer(serializers.ModelSerializer):
class UserRegisterSerializer(serializers.ModelSerializer):
fcm = serializers.CharField(required=False)
device_id = serializers.CharField(required=True)
device_id = serializers.CharField(required=False)
email = serializers.EmailField()
class Meta:
@ -51,7 +51,7 @@ class UserRegisterSerializer(serializers.ModelSerializer):
extra_kwargs = {
'fullname': {'required': True,},
'email': {'required': True,},
'device_id': {'required': True,},
'device_id': {'required': False,},
}
def validate_email(self, value):

16
apps/account/views/user.py

@ -177,7 +177,7 @@ class UserVerifyView(CreateAPIView):
code = self.valied_code(data['code'], verify_data['code'])
del verify_data['code']
user = self.perform_create(
email=serializer.data['email'], device_id=serializer.data['device_id'], **verify_data
email=serializer.data['email'], device_id=serializer.data.get('device_id'), **verify_data
)
token, _ = Token.objects.get_or_create(user=user)
return Response(data={
@ -205,17 +205,25 @@ class UserVerifyView(CreateAPIView):
if kwargs['password']:
user.is_active = True
user.deletion_date = None
user.device_id = device_id
if device_id:
user.device_id = device_id
user.last_login = timezone.now()
user.save()
else:
user = User.objects.filter(device_id=device_id, email__isnull=True).first()
# If device_id is provided, try to find existing user with that device_id
if device_id:
user = User.objects.filter(device_id=device_id, email__isnull=True).first()
else:
user = None
if not user:
user = User.objects.create(**kwargs)
else:
user.email = email
user.fullname = kwargs['fullname']
user.device_id = device_id
if device_id:
user.device_id = device_id
user.last_login = timezone.now()
user.is_active = True
user.save()

Loading…
Cancel
Save