jwt token timezone 변경 .

feature-youtube-upload
hbyang 2026-01-30 10:13:50 +09:00
parent 1cb698e8ea
commit f153157227
3 changed files with 21 additions and 10 deletions

View File

@ -400,6 +400,17 @@ async def _autocomplete_logic(autocomplete_item:dict):
status_code=status.HTTP_502_BAD_GATEWAY, status_code=status.HTTP_502_BAD_GATEWAY,
detail="자동완성 place id 추출 실패", detail="자동완성 place id 추출 실패",
) )
if not new_url:
step1_elapsed = (time.perf_counter() - step1_start) * 1000
logger.error(
f"[crawling] Autocomplete FAILED - URL을 찾을 수 없음 ({step1_elapsed:.1f}ms)"
)
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="해당 장소의 네이버 지도 URL을 찾을 수 없습니다.",
)
return new_url return new_url
def _extract_image_name(url: str, index: int) -> str: def _extract_image_name(url: str, index: int) -> str:

View File

@ -5,7 +5,7 @@
""" """
import logging import logging
from datetime import datetime, timezone from datetime import datetime
from typing import Optional from typing import Optional
from sqlalchemy import select, update from sqlalchemy import select, update
@ -113,7 +113,7 @@ class AuthService:
logger.debug(f"[AUTH] 리프레시 토큰 저장 완료 - user_id: {user.id}, user_uuid: {user.user_uuid}") logger.debug(f"[AUTH] 리프레시 토큰 저장 완료 - user_id: {user.id}, user_uuid: {user.user_uuid}")
# 7. 마지막 로그인 시간 업데이트 # 7. 마지막 로그인 시간 업데이트
user.last_login_at = datetime.now(timezone.utc) user.last_login_at = datetime.now()
await session.commit() await session.commit()
redirect_url = f"{prj_settings.PROJECT_DOMAIN}" redirect_url = f"{prj_settings.PROJECT_DOMAIN}"
@ -168,7 +168,7 @@ class AuthService:
if db_token.is_revoked: if db_token.is_revoked:
raise TokenRevokedError() raise TokenRevokedError()
if db_token.expires_at < datetime.now(timezone.utc): if db_token.expires_at < datetime.now():
raise TokenExpiredError() raise TokenExpiredError()
# 4. 사용자 확인 # 4. 사용자 확인
@ -428,7 +428,7 @@ class AuthService:
.where(RefreshToken.token_hash == token_hash) .where(RefreshToken.token_hash == token_hash)
.values( .values(
is_revoked=True, is_revoked=True,
revoked_at=datetime.now(timezone.utc), revoked_at=datetime.now(),
) )
) )
await session.commit() await session.commit()
@ -453,7 +453,7 @@ class AuthService:
) )
.values( .values(
is_revoked=True, is_revoked=True,
revoked_at=datetime.now(timezone.utc), revoked_at=datetime.now(),
) )
) )
await session.commit() await session.commit()

View File

@ -5,7 +5,7 @@ Access Token과 Refresh Token의 생성, 검증, 해시 기능을 제공합니
""" """
import hashlib import hashlib
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta
from typing import Optional from typing import Optional
from jose import JWTError, jwt from jose import JWTError, jwt
@ -23,7 +23,7 @@ def create_access_token(user_uuid: str) -> str:
Returns: Returns:
JWT 액세스 토큰 문자열 JWT 액세스 토큰 문자열
""" """
expire = datetime.now(timezone.utc) + timedelta( expire = datetime.now() + timedelta(
minutes=jwt_settings.JWT_ACCESS_TOKEN_EXPIRE_MINUTES minutes=jwt_settings.JWT_ACCESS_TOKEN_EXPIRE_MINUTES
) )
to_encode = { to_encode = {
@ -48,7 +48,7 @@ def create_refresh_token(user_uuid: str) -> str:
Returns: Returns:
JWT 리프레시 토큰 문자열 JWT 리프레시 토큰 문자열
""" """
expire = datetime.now(timezone.utc) + timedelta( expire = datetime.now() + timedelta(
days=jwt_settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS days=jwt_settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS
) )
to_encode = { to_encode = {
@ -104,9 +104,9 @@ def get_refresh_token_expires_at() -> datetime:
리프레시 토큰 만료 시간 계산 리프레시 토큰 만료 시간 계산
Returns: Returns:
리프레시 토큰 만료 datetime (UTC) 리프레시 토큰 만료 datetime (로컬 시간)
""" """
return datetime.now(timezone.utc) + timedelta( return datetime.now() + timedelta(
days=jwt_settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS days=jwt_settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS
) )