Skip to content

Commit

Permalink
feat: mproved jwt tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
Lokrip committed Feb 15, 2025
1 parent 8a451cb commit 202833f
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 6 deletions.
30 changes: 29 additions & 1 deletion server/serializers/auth_serializers.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,40 @@
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.serializers import (
TokenObtainPairSerializer,
TokenRefreshSerializer
)
from rest_framework_simplejwt.settings import api_settings

from datetime import timedelta
from django.utils import timezone

class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
data = super().validate(attrs)

now = timezone.now()

access_token_lifetime = api_settings.ACCESS_TOKEN_LIFETIME

data.update({
"id": self.user.id,
'username': self.user.username,
'email': self.user.email,
"accessTokenExpires": int((now + access_token_lifetime).timestamp()),
})
return data

class CustomTokenRefreshSerializer(TokenRefreshSerializer):
def validate(self, attrs):
data = super().validate(attrs)

access_token_lifetime = api_settings.ACCESS_TOKEN_LIFETIME
refresh_token_lifetime = api_settings.REFRESH_TOKEN_LIFETIME

now = timezone.now()

data.update({
"access_expires_in": int((now + access_token_lifetime).timestamp()), # В секундах с 1970
"refresh_expires_in": int((now + refresh_token_lifetime).timestamp()), # В секундах с 1970
})

return data
8 changes: 5 additions & 3 deletions server/urls/auth.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
from django.urls import path, include

from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)

from rest_framework_simplejwt.views import TokenVerifyView

from server.views.auth_view import CustomTokenObtainPairView
from server.views.auth_view import (
CustomTokenObtainPairView,
CustomTokenRefreshView
)


auth_urlpatterns = [
path('api/v1/drf-auth/', include('rest_framework.urls')),

path('api/token/', CustomTokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('api/token/refresh/', CustomTokenRefreshView.as_view(), name='token_refresh'),
path('api/token/verify/', TokenVerifyView.as_view(), name='token_verify'),
]
13 changes: 11 additions & 2 deletions server/views/auth_view.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
from rest_framework_simplejwt.views import TokenObtainPairView
from server.serializers.auth_serializers import CustomTokenObtainPairSerializer
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView
)
from server.serializers.auth_serializers import (
CustomTokenObtainPairSerializer,
CustomTokenRefreshSerializer
)

class CustomTokenObtainPairView(TokenObtainPairView):
serializer_class = CustomTokenObtainPairSerializer

class CustomTokenRefreshView(TokenRefreshView):
serializer_class = CustomTokenRefreshSerializer

0 comments on commit 202833f

Please sign in to comment.