Files
CE-Association-Website/backend/api/authentication.py
Amirhossein Khalili 7a8ddeabed
Some checks failed
CI/CD / Backend & Frontend Checks (push) Has been cancelled
CI/CD / Deploy to Production (push) Has been cancelled
init
2026-05-18 11:34:07 +03:30

42 lines
1.4 KiB
Python

from django.conf import settings
from ninja.security import HttpBearer
from datetime import datetime, timedelta, UTC
import jwt
from users.models import User
class JWTAuth(HttpBearer):
def authenticate(self, request, token):
try:
payload = jwt.decode(token, settings.JWT_SECRET_KEY, algorithms=[settings.JWT_ALGORITHM])
user_id = payload.get('user_id')
if user_id:
user = User.objects.get(id=user_id, is_email_verified=True, is_active=True)
return user
except (jwt.ExpiredSignatureError, jwt.InvalidTokenError, User.DoesNotExist):
pass
return None
def create_jwt_token(user):
"""Create JWT token for user"""
payload = {
'user_id': user.id,
'email': user.email,
'exp': datetime.now(UTC) + timedelta(seconds=settings.JWT_ACCESS_TOKEN_LIFETIME),
'iat': datetime.now(UTC),
}
return jwt.encode(payload, settings.JWT_SECRET_KEY, algorithm=settings.JWT_ALGORITHM)
def create_refresh_token(user):
"""Create refresh token for user"""
payload = {
'user_id': user.id,
'type': 'refresh',
'exp': datetime.now(UTC) + timedelta(seconds=settings.JWT_REFRESH_TOKEN_LIFETIME),
'iat': datetime.now(UTC),
}
return jwt.encode(payload, settings.JWT_SECRET_KEY, algorithm=settings.JWT_ALGORITHM)
jwt_auth = JWTAuth()