diff --git a/rest_auth/tests/mixins.py b/rest_auth/tests/mixins.py index 30b3d58..0972a87 100644 --- a/rest_auth/tests/mixins.py +++ b/rest_auth/tests/mixins.py @@ -93,6 +93,7 @@ class TestsMixin(object): self.fb_connect_url = reverse('fb_connect') self.tw_connect_url = reverse('tw_connect') self.social_account_list_url = reverse('social_account_list') + self.signal_sent = False def _login(self): payload = { diff --git a/rest_auth/tests/test_api.py b/rest_auth/tests/test_api.py index 9c5fd9e..5522e6f 100644 --- a/rest_auth/tests/test_api.py +++ b/rest_auth/tests/test_api.py @@ -1,5 +1,5 @@ from django.test import TestCase, override_settings -from django.contrib.auth import get_user_model +from django.contrib.auth import get_user_model, user_logged_in from django.core import mail from django.conf import settings from django.utils.encoding import force_text @@ -66,13 +66,15 @@ class APIBasicTests(TestsMixin, TestCase): result['token'] = default_token_generator.make_token(user) return result + def on_login(self, sender, **kwargs): + self.signal_sent = True + @override_settings(ACCOUNT_AUTHENTICATION_METHOD=account_app_settings.AuthenticationMethod.EMAIL) def test_login_failed_email_validation(self): payload = { "email": '', "password": self.PASS } - resp = self.post(self.login_url, data=payload, status_code=400) self.assertEqual(resp.json['non_field_errors'][0], u'Must include "email" and "password".') @@ -105,11 +107,15 @@ class APIBasicTests(TestsMixin, TestCase): self.post(self.password_change_url, status_code=403) + # connect to user logged in + user_logged_in.connect(self.on_login) + # create user user = get_user_model().objects.create_user(self.USERNAME, '', self.PASS) self.post(self.login_url, data=payload, status_code=200) self.assertEqual('key' in self.response.json.keys(), True) + self.assertTrue(self.signal_sent) self.token = self.response.json['key'] self.post(self.password_change_url, status_code=400) diff --git a/rest_auth/views.py b/rest_auth/views.py index 8efcdd5..a1a69c7 100644 --- a/rest_auth/views.py +++ b/rest_auth/views.py @@ -1,7 +1,7 @@ from django.contrib.auth import ( login as django_login, - logout as django_logout -) + logout as django_logout, + user_logged_in) from django.conf import settings from django.contrib.auth import get_user_model from django.core.exceptions import ObjectDoesNotExist @@ -69,6 +69,12 @@ class LoginView(GenericAPIView): if getattr(settings, 'REST_SESSION_LOGIN', True): self.process_login() + else: + ''' + Send user logged in because it's only send on django_login but if REST_SESSION_LOGIN is disable it + is not going to be sent + ''' + user_logged_in.send(sender=self.user.__class__, request=self.request, user=self.user) def get_response(self): serializer_class = self.get_response_serializer()