1- from datetime import timedelta
1+ from datetime import datetime , timedelta
22
3- from fastapi import APIRouter , Depends , HTTPException , status
3+ from fastapi import APIRouter , Cookie , Depends , HTTPException , status
44from fastapi .responses import JSONResponse , Response
55from fastapi .security import OAuth2PasswordRequestForm
66
1212 get_current_user ,
1313 update_user_info ,
1414)
15- from module .security .jwt import create_access_token
15+ from module .security .jwt import create_access_token , decode_token
1616
1717from .response import u_response
1818
@@ -35,19 +35,29 @@ async def login(response: Response, form_data=Depends(OAuth2PasswordRequestForm)
3535@router .get (
3636 "/refresh_token" , response_model = dict , dependencies = [Depends (get_current_user )]
3737)
38- async def refresh (response : Response ):
39- token = create_access_token (
40- data = {"sub" : active_user [0 ]}, expires_delta = timedelta (days = 1 )
38+ async def refresh (response : Response , token : str = Cookie (None )):
39+ payload = decode_token (token )
40+ username = payload .get ("sub" ) if payload else None
41+ if not username :
42+ raise HTTPException (
43+ status_code = status .HTTP_401_UNAUTHORIZED , detail = "Unauthorized"
44+ )
45+ active_user [username ] = datetime .now ()
46+ new_token = create_access_token (
47+ data = {"sub" : username }, expires_delta = timedelta (days = 1 )
4148 )
42- response .set_cookie (key = "token" , value = token , httponly = True , max_age = 86400 )
43- return {"access_token" : token , "token_type" : "bearer" }
49+ response .set_cookie (key = "token" , value = new_token , httponly = True , max_age = 86400 )
50+ return {"access_token" : new_token , "token_type" : "bearer" }
4451
4552
4653@router .get (
4754 "/logout" , response_model = APIResponse , dependencies = [Depends (get_current_user )]
4855)
49- async def logout (response : Response ):
50- active_user .clear ()
56+ async def logout (response : Response , token : str = Cookie (None )):
57+ payload = decode_token (token )
58+ username = payload .get ("sub" ) if payload else None
59+ if username :
60+ active_user .pop (username , None )
5161 response .delete_cookie (key = "token" )
5262 return JSONResponse (
5363 status_code = 200 ,
@@ -56,8 +66,15 @@ async def logout(response: Response):
5666
5767
5868@router .post ("/update" , response_model = dict , dependencies = [Depends (get_current_user )])
59- async def update_user (user_data : UserUpdate , response : Response ):
60- old_user = active_user [0 ]
69+ async def update_user (
70+ user_data : UserUpdate , response : Response , token : str = Cookie (None )
71+ ):
72+ payload = decode_token (token )
73+ old_user = payload .get ("sub" ) if payload else None
74+ if not old_user :
75+ raise HTTPException (
76+ status_code = status .HTTP_401_UNAUTHORIZED , detail = "Unauthorized"
77+ )
6178 if update_user_info (user_data , old_user ):
6279 token = create_access_token (
6380 data = {"sub" : old_user }, expires_delta = timedelta (days = 1 )
0 commit comments