Skip to content

Commit 36a07e7

Browse files
committed
Count non expiring tokens when determining if the limit is reached
Fixes #280 Thanks to @pablomm for the code in the ticket
1 parent bc7c284 commit 36a07e7

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
@@ -62,7 +63,9 @@ def post(self, request, format=None):
6263
token_limit_per_user = self.get_token_limit_per_user()
6364
if token_limit_per_user is not None:
6465
now = timezone.now()
65-
token = request.user.auth_token_set.filter(expiry__gt=now)
66+
token = request.user.auth_token_set.filter(
67+
Q(expiry__gt=now) | Q(expiry__isnull=True)
68+
)
6669
if token.count() >= token_limit_per_user:
6770
return Response(
6871
{"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
@@ -339,8 +339,10 @@ def test_exceed_token_amount_per_user(self):
339339

340340
with override_settings(REST_KNOX=token_user_limit_knox):
341341
reload(views)
342-
for _ in range(10):
342+
for _ in range(5):
343343
AuthToken.objects.create(user=self.user)
344+
for _ in range(5):
345+
AuthToken.objects.create(user=self.user, expiry=None)
344346
url = reverse('knox_login')
345347
self.client.credentials(
346348
HTTP_AUTHORIZATION=get_basic_auth_header(self.username, self.password)

0 commit comments

Comments
 (0)