Skip to content
This repository was archived by the owner on May 26, 2020. It is now read-only.

Commit 5a369c4

Browse files
committed
Allow jtw_payload_handler to work with User models that don't have an email field
1 parent 4e99990 commit 5a369c4

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

rest_framework_jwt/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ def jwt_payload_handler(user):
2020

2121
payload = {
2222
'user_id': user.pk,
23-
'email': user.email,
2423
'username': username,
2524
'exp': datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA
2625
}
26+
if hasattr(user, 'email'):
27+
payload['email'] = user.email
2728
if isinstance(user.pk, uuid.UUID):
2829
payload['user_id'] = str(user.pk)
2930

tests/models.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,17 @@ class Meta:
1414
app_label = 'tests'
1515

1616

17+
class CustomUserWithoutEmail(AbstractBaseUser):
18+
username = models.CharField(max_length=255, unique=True)
19+
20+
objects = BaseUserManager()
21+
22+
USERNAME_FIELD = 'username'
23+
24+
class Meta:
25+
app_label = 'tests'
26+
27+
1728
class CustomUserUUID(AbstractBaseUser):
1829
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
1930
email = models.EmailField(max_length=255, unique=True)

tests/test_utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from rest_framework_jwt import utils
99
from rest_framework_jwt.compat import get_user_model
1010
from rest_framework_jwt.settings import api_settings, DEFAULTS
11+
from tests.models import CustomUserWithoutEmail
1112

1213
User = get_user_model()
1314

@@ -38,6 +39,16 @@ def test_jwt_payload_handler(self):
3839
self.assertEqual(payload['username'], self.username)
3940
self.assertTrue('exp' in payload)
4041

42+
def test_jwt_payload_handler_no_email_address(self):
43+
user = CustomUserWithoutEmail.objects.create(username=self.username)
44+
45+
payload = utils.jwt_payload_handler(user)
46+
self.assertTrue(isinstance(payload, dict))
47+
self.assertFalse(hasattr(payload, 'email'))
48+
self.assertEqual(payload['user_id'], self.user.pk)
49+
self.assertEqual(payload['username'], self.username)
50+
self.assertTrue('exp' in payload)
51+
4152
def test_jwt_encode(self):
4253
payload = utils.jwt_payload_handler(self.user)
4354
token = utils.jwt_encode_handler(payload)

0 commit comments

Comments
 (0)