diff --git a/apps/authentication/mixins.py b/apps/authentication/mixins.py index 5f1676f86..c00335ec0 100644 --- a/apps/authentication/mixins.py +++ b/apps/authentication/mixins.py @@ -226,12 +226,20 @@ class MFAFaceMixin: def is_context_finished(context): return context.get('is_finished', False) + @staticmethod + def is_context_success(context): + return context.get('success', False) + def get_face_code(self): context = self.get_face_recognition_context() if not self.is_context_finished(context): raise RuntimeError("Face recognition is not yet completed.") + if not self.is_context_success(context): + msg = context.get('error_message', '') + raise RuntimeError("Face recognition failed,{}".format(msg)) + face_code = context.get('face_code') if not face_code: raise ValueError("Face code is missing from the context.") diff --git a/apps/authentication/serializers/password_mfa.py b/apps/authentication/serializers/password_mfa.py index accf24a89..826fdfdcc 100644 --- a/apps/authentication/serializers/password_mfa.py +++ b/apps/authentication/serializers/password_mfa.py @@ -58,7 +58,7 @@ class MFAFaceCallbackSerializer(serializers.Serializer): token = serializers.CharField(required=True, allow_blank=False) success = serializers.BooleanField(required=True, allow_null=False) error_message = serializers.CharField(required=False, allow_null=True, allow_blank=True) - face_code = serializers.CharField(required=True) + face_code = serializers.CharField(required=False, allow_null=True, allow_blank=True) def update(self, instance, validated_data): pass