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

Commit 8bf295c

Browse files
authored
Merge pull request #268 from shanx/allow-user-without-email
Allow jtw_payload_handler to work with User models that don't have an Email field
2 parents 160aaeb + 5a369c4 commit 8bf295c

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
@@ -41,10 +41,11 @@ def jwt_payload_handler(user):
4141

4242
payload = {
4343
'user_id': user.pk,
44-
'email': user.email,
4544
'username': username,
4645
'exp': datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA
4746
}
47+
if hasattr(user, 'email'):
48+
payload['email'] = user.email
4849
if isinstance(user.pk, uuid.UUID):
4950
payload['user_id'] = str(user.pk)
5051

tests/models.py

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

2222

23+
class CustomUserWithoutEmail(AbstractBaseUser):
24+
username = models.CharField(max_length=255, unique=True)
25+
26+
objects = BaseUserManager()
27+
28+
USERNAME_FIELD = 'username'
29+
30+
class Meta:
31+
app_label = 'tests'
32+
33+
2334
class CustomUserUUID(AbstractBaseUser):
2435
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
2536
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)