diff --git a/setup.py b/setup.py index 463f827..e71f60c 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ ] tests_require = [ - 'coverage==.4.4.2', + 'coverage==4.4.2', 'pytest==3.3.2', 'pytest-cov==2.5.1', 'pytest-django==3.1.2', diff --git a/src/django_cognito_jwt/backend.py b/src/django_cognito_jwt/backend.py index 2a86351..3f5f35d 100644 --- a/src/django_cognito_jwt/backend.py +++ b/src/django_cognito_jwt/backend.py @@ -6,6 +6,8 @@ from django.utils.translation import ugettext as _ from rest_framework import exceptions from rest_framework.authentication import BaseAuthentication, get_authorization_header +from django.utils.module_loading import import_string + from django_cognito_jwt.validator import TokenError, TokenValidator @@ -28,10 +30,21 @@ def authenticate(self, request): except TokenError: raise exceptions.AuthenticationFailed() - USER_MODEL = self.get_user_model() - user = USER_MODEL.objects.get_or_create_for_cognito(jwt_payload) + custom_user_manager = self.get_custom_user_manager() + if custom_user_manager: + user = custom_user_manager.get_or_create_for_cognito(jwt_payload) + else: + USER_MODEL = self.get_user_model() + user = USER_MODEL.objects.get_or_create_for_cognito(jwt_payload) return (user, jwt_token) + def get_custom_user_manager(self): + result = None + custom_user_manager_path = getattr(settings, "COGNITO_USER_MANAGER", False) + if(custom_user_manager_path): + result = import_string(custom_user_manager_path)() + return result + def get_user_model(self): user_model = getattr(settings, "COGNITO_USER_MODEL", settings.AUTH_USER_MODEL) return django_apps.get_model(user_model, require_ready=False)