Cookies em FastAPI
Configurando Cookies
No FastAPI, a configuração de cookies no servidor pode ser feita usando o método set_cookie, que está disponível no objeto Response e em suas subclasses. Este método aceita os seguintes parâmetros:
key: Nome ou identificador do cookie. É um parâmetro obrigatório.value: Valor do cookie. Por padrão, é uma string vazia.max_age: Tempo de vida do cookie em segundos. Pode ser um número ouNone. Quando definido comoNone, o cookie terá validade apenas durante a sessão atual do navegador (comportamento padrão).expires: Data ou momento em que o cookie expira. Assim comomax_age, pode ser um número ouNone. O padrão é limitar o cookie à sessão atual do navegador.path: o caminho da URL no qual o cookie será válido. O valor padrão é/, que representa a raiz da aplicação.domain: Domínio ao qual o cookie se aplica. O padrão éNone.secure: Indica se o cookie será enviado somente em conexões HTTPS. Quando configurado comoTrue, o cookie será transmitido apenas em solicitações seguras. O padrão éFalse.httponly: Define se o cookie estará acessível a scripts JavaScript no cliente. Quando configurado comoTrue, o cookie será inacessível ao JavaScript, protegendo-o contra ataques como XSS. O padrão éFalse.samesite: Controla o envio de cookies em solicitações cross-origin (entre domínios). O valor padrão élax, que restringe o envio do cookie na maioria dos cenários cross-origin.
O exemplo a seguir demonstra como configurar um cookie chamado last_visit, que armazena a data e hora do último acesso ao site:
from fastapi import FastAPI, Response
from datetime import datetime
app = FastAPI()
@app.get("/")
def root(response: Response):
now = datetime.now() # Obtém a data e hora atuais
response.set_cookie(key="last_visit", value=now.isoformat())
return {"message": "Cookie configurado"}Nesse caso, o cookie last_visit contém a data e a hora do último acesso do usuário. Esse valor pode ser visualizado nas ferramentas de desenvolvedor do navegador.

Também é possível configurar cookies criando um objeto Response explicitamente. Veja o exemplo:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
from datetime import datetime
app = FastAPI()
@app.get("/")
def root():
now = datetime.now() # Obtém a data e hora atuais
response = JSONResponse(content={"message": "Cookie configurado"})
response.set_cookie(key="last_visit", value=now.isoformat())
return responseAqui, criamos uma resposta JSON explícita e adicionamos o cookie last_visit diretamente ao objeto de resposta antes de retorná-lo.
Obtendo Cookies
Para acessar cookies no servidor, o FastAPI fornece o objeto Cookie, que pode ser utilizado para vincular valores de cookies aos parâmetros da função. Veja como acessar o cookie last_visit previamente configurado:
from fastapi import FastAPI, Cookie
app = FastAPI()
@app.get("/")
def root(last_visit: str = Cookie()):
return {"last visit": last_visit}Nesse exemplo, o valor do cookie last_visit é extraído da solicitação e retornado na resposta.

Lidando com Cookies Opcionais
Se o cookie for obrigatório e não estiver presente na solicitação, o FastAPI lançará uma exceção. Para evitar isso, você pode definir um valor padrão, como None, para lidar com situações onde o cookie pode estar ausente:
from fastapi import FastAPI, Cookie
app = FastAPI()
@app.get("/")
def root(last_visit: str | None = Cookie(default=None)):
if last_visit is None:
return {"message": "Este é o seu primeiro acesso ao site"}
else:
return {"message": f"Seu último acesso foi em: {last_visit}"}Nesse caso, se o cookie last_visit não estiver presente na solicitação, o servidor retornará uma mensagem indicando que é o primeiro acesso do usuário. Caso contrário, será retornada a data e hora do último acesso.
Documentação oficial: