Skip to content

Commit d8cf4e7

Browse files
committed
fix(security): replace deprecated datetime.utcnow() with datetime.now(UTC)
- Fixes JWT token validation errors due to timezone offset - datetime.utcnow() is deprecated in Python 3.12+ - Using timezone-aware datetime.now(UTC) prevents timestamp calculation issues
1 parent 5faa8ff commit d8cf4e7

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

backend/app/core/security.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from sqlalchemy.ext.asyncio import AsyncSession
2-
from datetime import datetime, timedelta as datetime_timedelta
2+
from datetime import datetime, timedelta as datetime_timedelta, UTC
33
from typing import Optional
44
from jose import jwt, JWTError
55
import logging
@@ -41,16 +41,16 @@ def create_access_token(data: dict, expires_delta: Optional[datetime_timedelta]
4141
"""Create a new access token."""
4242
to_encode = data.copy()
4343
if expires_delta:
44-
expire = datetime.utcnow() + expires_delta
44+
expire = datetime.now(UTC) + expires_delta
4545
else:
46-
expire = datetime.utcnow() + datetime_timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
46+
expire = datetime.now(UTC) + datetime_timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
4747

4848
# Convert datetime to Unix timestamp for JWT
4949
to_encode.update({"exp": expire.timestamp()})
5050

5151
# Let JWT library handle iat automatically if not provided
5252
if "iat" not in to_encode:
53-
to_encode.update({"iat": datetime.utcnow().timestamp()})
53+
to_encode.update({"iat": datetime.now(UTC).timestamp()})
5454

5555
encoded_jwt = jwt.encode(to_encode, settings.SECRET_KEY, algorithm=settings.ALGORITHM)
5656
return encoded_jwt

0 commit comments

Comments
 (0)