2

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
Tomas Am
  • 433
  • 4
  • 13

0 Answers0