Definí un parámetro de cookie opcional y ahora quiero verificar si se configuró la cookie. Desafortunadamente, la variable no equivale a None sino a un objeto Cookie vacío. ¿Cómo puedo verificar el objeto de la cookie si está configurado?
Así es como definí el parámetro de la cookie:
@app.route("/graphcall") def graphcall(request: Request, ads_id: Optional[str] = Cookie(None)): if ads_id: # Do stuff if the ads_id is setSupongo que lo intentó a través de SwaggerUI. La configuración de valores de cookies actualmente no funciona a través de SwaggerUI debido a restricciones de seguridad del navegador.
@app.get("/items/") async def read_items(ads_id: Optional[str] = Cookie(None)): if ads_id: answer = "set to %s" % ads_id else: answer = "not set" return {"ads_id": answer}funciona perfectamente desde línea de comandos con Fastapi 0.61.0
$ curl -X GET "http://127.0.0.1:8000/items/" -H "accept: application/json" -H "Cookie: ads_id=foobar" {"ads_id":"set to foobar"} $ curl -X GET "http://127.0.0.1:8000/items/" -H "accept: application/json" {"ads_id":"not set"}para mi esto funciona
async def setcookie(request: Request, nm: str = Form(...)): print("setcookie "+nm) response = templates.TemplateResponse("readcookie.html",{"request": request}) response.set_cookie(key="userID", value=nm) @app.get("/getcookie/", response_class=HTMLResponse) async def getcookie(request: Request,userID: Optional[str] = Cookie(None)): if userID: print("getcookie "+userID) else: print("getcookie None") return templates.TemplateResponse("showcookie.html", {"request": request, "name": userID})En getcookie tengo la cookie configurada en setcookie.
Sigo este enfoque:
https://fastapi.tiangolo.com/advanced/response-cookies/#return-a-response-directly
Todavía no entiendo por qué el método Optional[str] = Cookie(None) no funcionó. Para mí de esta manera funcionó
@router.post('/login') async def sign_in( user_data: OAuth2PasswordRequestForm = Depends(), service: AuthService = Depends(), ): session = await service.authenticate_user( user_data.username, user_data.password ) response = RedirectResponse(url='/') response.set_cookie('Authorization', value=session['session_id'], httponly=True) return response async def get_current_user(request: Request): try: cookie_authorization: str = request.cookies.get("Authorization") # some logic with cookie_authorization except Exception as e: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Invalid authentication" )