Skip to content

Commit bd1d062

Browse files
Merge pull request #318 from morty/280-count-non-expiring-tokens
Count non expiring tokens when determining if the limit is reached
2 parents 7f35152 + 36a07e7 commit bd1d062

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

knox/views.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.contrib.auth.signals import user_logged_in, user_logged_out
2+
from django.db.models import Q
23
from django.utils import timezone
34
from rest_framework import status
45
from rest_framework.permissions import IsAuthenticated
@@ -66,7 +67,9 @@ def post(self, request, format=None):
6667
token_limit_per_user = self.get_token_limit_per_user()
6768
if token_limit_per_user is not None:
6869
now = timezone.now()
69-
token = request.user.auth_token_set.filter(expiry__gt=now)
70+
token = request.user.auth_token_set.filter(
71+
Q(expiry__gt=now) | Q(expiry__isnull=True)
72+
)
7073
if token.count() >= token_limit_per_user:
7174
return Response(
7275
{"error": "Maximum amount of tokens allowed per user exceeded."},

tests/tests.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,8 +372,10 @@ def test_exceed_token_amount_per_user(self):
372372

373373
with override_settings(REST_KNOX=token_user_limit_knox):
374374
reload(views)
375-
for _ in range(10):
375+
for _ in range(5):
376376
AuthToken.objects.create(user=self.user)
377+
for _ in range(5):
378+
AuthToken.objects.create(user=self.user, expiry=None)
377379
url = reverse('knox_login')
378380
self.client.credentials(
379381
HTTP_AUTHORIZATION=get_basic_auth_header(self.username, self.password)

0 commit comments

Comments
 (0)