Update app.py
Browse files
app.py
CHANGED
@@ -39,7 +39,14 @@ db = mongo_client[db_name]
|
|
39 |
app = FastAPI()
|
40 |
app.add_middleware(
|
41 |
CORSMiddleware,
|
42 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
allow_credentials=True,
|
44 |
allow_methods=["*"],
|
45 |
allow_headers=["*"],
|
@@ -73,27 +80,53 @@ async def login(request: Request, response: Response):
|
|
73 |
"expires_at": datetime.utcnow() + timedelta(days=7)
|
74 |
})
|
75 |
|
76 |
-
#
|
77 |
response.set_cookie(
|
78 |
key="session_id",
|
79 |
value=session_id,
|
80 |
-
httponly=
|
81 |
max_age=7*24*60*60, # 7 jours
|
82 |
-
samesite="
|
|
|
|
|
83 |
)
|
84 |
|
85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
|
87 |
-
except HTTPException as he:
|
88 |
-
raise he
|
89 |
except Exception as e:
|
|
|
90 |
raise HTTPException(status_code=500, detail=str(e))
|
91 |
|
92 |
|
93 |
async def get_current_user(request: Request):
|
|
|
94 |
session_id = request.cookies.get("session_id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
if not session_id:
|
96 |
-
raise HTTPException(status_code=401, detail="Non authentifié")
|
97 |
|
98 |
# Vérifier si la session existe et n'est pas expirée
|
99 |
session = db.sessions.find_one({
|
|
|
39 |
app = FastAPI()
|
40 |
app.add_middleware(
|
41 |
CORSMiddleware,
|
42 |
+
# Spécifiez les origines exactes au lieu de "*"
|
43 |
+
allow_origins=[
|
44 |
+
"https://axl95-medically.hf.space", # URL de votre espace HF
|
45 |
+
"https://huggingface.co",
|
46 |
+
"http://localhost:3000",
|
47 |
+
"http://localhost:7860",
|
48 |
+
"http://0.0.0.0:7860"
|
49 |
+
],
|
50 |
allow_credentials=True,
|
51 |
allow_methods=["*"],
|
52 |
allow_headers=["*"],
|
|
|
80 |
"expires_at": datetime.utcnow() + timedelta(days=7)
|
81 |
})
|
82 |
|
83 |
+
# Cookie configuré pour fonctionner sur HF Spaces
|
84 |
response.set_cookie(
|
85 |
key="session_id",
|
86 |
value=session_id,
|
87 |
+
httponly=False, # Permettre à JavaScript d'accéder au cookie
|
88 |
max_age=7*24*60*60, # 7 jours
|
89 |
+
samesite="none", # Obligatoire pour le cross-site
|
90 |
+
secure=True, # Obligatoire avec samesite=none
|
91 |
+
path="/" # Accessible sur tout le domaine
|
92 |
)
|
93 |
|
94 |
+
# Log pour débogage
|
95 |
+
print(f"Session créée: {session_id} pour l'utilisateur {user_id}")
|
96 |
+
|
97 |
+
# Renvoyer le session_id dans la réponse pour permettre le stockage manuel si nécessaire
|
98 |
+
return {
|
99 |
+
"success": True,
|
100 |
+
"username": username,
|
101 |
+
"user_id": user_id,
|
102 |
+
"session_id": session_id # Permet de stocker la session côté client
|
103 |
+
}
|
104 |
|
|
|
|
|
105 |
except Exception as e:
|
106 |
+
print(f"Erreur login: {str(e)}")
|
107 |
raise HTTPException(status_code=500, detail=str(e))
|
108 |
|
109 |
|
110 |
async def get_current_user(request: Request):
|
111 |
+
# 1. Essayer d'obtenir la session du cookie
|
112 |
session_id = request.cookies.get("session_id")
|
113 |
+
print(f"Cookie de session reçu: {session_id[:5] if session_id else 'None'}")
|
114 |
+
|
115 |
+
# 2. Si pas de cookie, vérifier l'en-tête d'autorisation
|
116 |
+
if not session_id:
|
117 |
+
auth_header = request.headers.get("Authorization")
|
118 |
+
if auth_header and auth_header.startswith("Bearer "):
|
119 |
+
session_id = auth_header.replace("Bearer ", "")
|
120 |
+
print(f"Session d'autorisation reçue: {session_id[:5]}...")
|
121 |
+
|
122 |
+
# 3. Si toujours pas de session, vérifier les paramètres de requête
|
123 |
+
if not session_id:
|
124 |
+
session_id = request.query_params.get("session_id")
|
125 |
+
if session_id:
|
126 |
+
print(f"Session des paramètres de requête: {session_id[:5]}...")
|
127 |
+
|
128 |
if not session_id:
|
129 |
+
raise HTTPException(status_code=401, detail="Non authentifié - Aucune session trouvée")
|
130 |
|
131 |
# Vérifier si la session existe et n'est pas expirée
|
132 |
session = db.sessions.find_one({
|