From 68dea0cf40cd8b04583c726d3163ee35f994f78d Mon Sep 17 00:00:00 2001 From: Jim Simon Date: Thu, 21 Dec 2017 11:39:48 -0500 Subject: [PATCH 1/5] Pass Request from JSONWebTokenSerializer to django.contrib.auth.authenticate Closes #387 --- rest_framework_jwt/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework_jwt/serializers.py b/rest_framework_jwt/serializers.py index 12b10a44..0ee5aa6c 100644 --- a/rest_framework_jwt/serializers.py +++ b/rest_framework_jwt/serializers.py @@ -47,7 +47,7 @@ def validate(self, attrs): } if all(credentials.values()): - user = authenticate(**credentials) + user = authenticate(self.context.get('request', None), **credentials) if user: if not user.is_active: From 60c5d2c72f4b176d9f76b406385ff2517bde07e9 Mon Sep 17 00:00:00 2001 From: Jim Simon Date: Thu, 21 Dec 2017 11:47:57 -0500 Subject: [PATCH 2/5] Pass Request as kwarg --- rest_framework_jwt/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework_jwt/serializers.py b/rest_framework_jwt/serializers.py index 0ee5aa6c..56a40e85 100644 --- a/rest_framework_jwt/serializers.py +++ b/rest_framework_jwt/serializers.py @@ -47,7 +47,7 @@ def validate(self, attrs): } if all(credentials.values()): - user = authenticate(self.context.get('request', None), **credentials) + user = authenticate(request=self.context.get('request', None), **credentials) if user: if not user.is_active: From 057afa80baf91a290092cdaa9813d9bdc68cae16 Mon Sep 17 00:00:00 2001 From: Jim Simon Date: Thu, 21 Dec 2017 12:06:24 -0500 Subject: [PATCH 3/5] Update Tests to Mock rest_framework.Request --- tests/test_serializers.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/tests/test_serializers.py b/tests/test_serializers.py index 2e6c7e53..f1a1c2d7 100644 --- a/tests/test_serializers.py +++ b/tests/test_serializers.py @@ -4,7 +4,10 @@ import django from django.test import TestCase from django.test.utils import override_settings + import rest_framework +from rest_framework.request import Request + from rest_framework_jwt.compat import get_user_model from rest_framework_jwt.serializers import JSONWebTokenSerializer @@ -14,6 +17,7 @@ drf2 = rest_framework.VERSION < StrictVersion('3.0.0') drf3 = rest_framework.VERSION >= StrictVersion('3.0.0') +Request = rest_framework.request.Request class JSONWebTokenSerializerTests(TestCase): @@ -28,10 +32,16 @@ def setUp(self): 'username': self.username, 'password': self.password } + + def get_serializer(self, **kwargs): + serializer = self.get_serializer(**kwargs) + serializer.context['request'] = Request(), + return serializer + @unittest.skipUnless(drf2, 'not supported in this version') def test_empty_drf2(self): - serializer = JSONWebTokenSerializer() + serializer = self.get_serializer() expected = { 'username': '' } @@ -40,7 +50,7 @@ def test_empty_drf2(self): @unittest.skipUnless(drf3, 'not supported in this version') def test_empty_drf3(self): - serializer = JSONWebTokenSerializer() + serializer = self.get_serializer() expected = { 'username': '', 'password': '' @@ -49,7 +59,7 @@ def test_empty_drf3(self): self.assertEqual(serializer.data, expected) def test_create(self): - serializer = JSONWebTokenSerializer(data=self.data) + serializer = self.get_serializer(data=self.data) is_valid = serializer.is_valid() token = serializer.object['token'] @@ -60,7 +70,7 @@ def test_create(self): def test_invalid_credentials(self): self.data['password'] = 'wrong' - serializer = JSONWebTokenSerializer(data=self.data) + serializer = self.get_serializer(data=self.data) is_valid = serializer.is_valid() expected_error = { @@ -77,7 +87,7 @@ def test_disabled_user(self): self.user.is_active = False self.user.save() - serializer = JSONWebTokenSerializer(data=self.data) + serializer = self.get_serializer(data=self.data) is_valid = serializer.is_valid() expected_error = { @@ -96,7 +106,7 @@ def test_disabled_user_all_users_backend(self): self.user.is_active = False self.user.save() - serializer = JSONWebTokenSerializer(data=self.data) + serializer = self.get_serializer(data=self.data) is_valid = serializer.is_valid() expected_error = { @@ -107,7 +117,7 @@ def test_disabled_user_all_users_backend(self): self.assertEqual(serializer.errors, expected_error) def test_required_fields(self): - serializer = JSONWebTokenSerializer(data={}) + serializer = self.get_serializer(data={}) is_valid = serializer.is_valid() expected_error = { From 7c51b901fdd8fc2c48bcd1bd44e26984cbd97f49 Mon Sep 17 00:00:00 2001 From: Jim Simon Date: Thu, 21 Dec 2017 12:30:54 -0500 Subject: [PATCH 4/5] Fix Formatting that Failed Linter --- tests/test_serializers.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/test_serializers.py b/tests/test_serializers.py index f1a1c2d7..72958aff 100644 --- a/tests/test_serializers.py +++ b/tests/test_serializers.py @@ -17,7 +17,6 @@ drf2 = rest_framework.VERSION < StrictVersion('3.0.0') drf3 = rest_framework.VERSION >= StrictVersion('3.0.0') -Request = rest_framework.request.Request class JSONWebTokenSerializerTests(TestCase): @@ -32,12 +31,11 @@ def setUp(self): 'username': self.username, 'password': self.password } - + def get_serializer(self, **kwargs): - serializer = self.get_serializer(**kwargs) + serializer = JSONWebTokenSerializer(**kwargs) serializer.context['request'] = Request(), return serializer - @unittest.skipUnless(drf2, 'not supported in this version') def test_empty_drf2(self): From a9507566aaccac375bf2148b1b2b1e60569cb7b7 Mon Sep 17 00:00:00 2001 From: Jim Simon Date: Thu, 21 Dec 2017 12:47:56 -0500 Subject: [PATCH 5/5] Initial REST Request with Django Request --- tests/test_serializers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_serializers.py b/tests/test_serializers.py index 72958aff..91a5627b 100644 --- a/tests/test_serializers.py +++ b/tests/test_serializers.py @@ -2,6 +2,7 @@ from distutils.version import StrictVersion import django +from django.http import HttpRequest from django.test import TestCase from django.test.utils import override_settings @@ -34,7 +35,7 @@ def setUp(self): def get_serializer(self, **kwargs): serializer = JSONWebTokenSerializer(**kwargs) - serializer.context['request'] = Request(), + serializer.context['request'] = Request(HttpRequest()), return serializer @unittest.skipUnless(drf2, 'not supported in this version')