In my FastApi application I am trying to set SessionMiddleWare cookie called "lang":
@app.get("/language")
async def language(request: Request, lang: str = None):
if lang == 'en':
request.session["lang"] = 'en'
elif lang == 'lt':
request.session["lang"] = 'lt'
return RedirectResponse(url="/", status_code=303)
It works fine, cause I can retrieve it later in another route:
@app.get("/")
async def read_html(request: Request):
babel.locale = request.session.get("lang", 'lt')
context = {
"title": "My Website",
"heading": "Welcome!",
"request": request
}
return templates.TemplateResponse("index.html", context=context)
However, setting 'lang' works only once, later it is not updating, what could be the issue?
Setup:
app.add_middleware(SessionMiddleware, secret_key="some-random-string-135489")
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.middleware("http")
async def some_middleware(request: Request, call_next):
response = await call_next(request)
session = request.cookies.get('session')
if session:
response.set_cookie(key='session', value=request.cookies.get('session'), httponly=True)
return response