diff --git a/src/core/auth/common/jwt.py b/src/core/auth/common/jwt.py index f734005..e700929 100644 --- a/src/core/auth/common/jwt.py +++ b/src/core/auth/common/jwt.py @@ -1,3 +1,4 @@ +import datetime from abc import ( ABC, abstractmethod, @@ -22,7 +23,9 @@ def refresh_tokens(self, token: str) -> TokensData: """Refresh tokens using refresh token.""" @abstractmethod - def _generate_token(self, payload: dict, type_: str) -> str: + def _generate_token( + self, payload: dict, type_: str, iat: datetime.datetime, exp: datetime.datetime + ) -> str: """Generate a JWT token.""" @abstractmethod diff --git a/src/core/auth/jwt.py b/src/core/auth/jwt.py index 074cec1..a75804a 100644 --- a/src/core/auth/jwt.py +++ b/src/core/auth/jwt.py @@ -22,13 +22,23 @@ def __init__(self, jwt_config: JWTConfig) -> None: def encode_token(self, payload: UserPayload) -> TokensData: copy_payload: dict = payload.model_dump() + + iat = datetime.datetime.now(datetime.UTC) + access_exp = iat + datetime.timedelta( + minutes=self._jwt_config.access_token_expire_minutes + ) + refresh_exp = iat + datetime.timedelta( + minutes=self._jwt_config.refresh_token_expire_minutes + ) + access_jwt = self._generate_token( - payload=copy_payload, - type_=TokenTypes.ACCESS.value, + payload=copy_payload, type_=TokenTypes.ACCESS.value, iat=iat, exp=access_exp ) refresh_jwt = self._generate_token( payload=copy_payload, type_=TokenTypes.REFRESH.value, + iat=iat, + exp=refresh_exp, ) return TokensData( @@ -44,7 +54,9 @@ def refresh_tokens(self, token: str) -> TokensData: refreshed_tokens = self.encode_token(UserPayload(**payload.model_dump())) return refreshed_tokens - def _generate_token(self, payload: dict, type_: str) -> str: + def _generate_token( + self, payload: dict, type_: str, iat: datetime.datetime, exp: datetime.datetime + ) -> str: iat = datetime.datetime.now(datetime.UTC) exp = iat + datetime.timedelta( minutes=self._jwt_config.access_token_expire_minutes