Top Stories

Ankaj Gupta
August 13, 2024
AssertionError: SessionMiddleware Must Be Installed

 Fixing the "AssertionError: SessionMiddleware Must Be Installed" in FastAPI

This error typically occurs when you try to access request.session in custom middleware before the SessionMiddleware has been properly applied. Here's how you can resolve this issue and ensure smooth session handling in your FastAPI application.

Understanding the Issue

The error indicates that the SessionMiddleware is either not installed correctly or is being accessed too late in the middleware stack. To resolve this, you need to make sure that SessionMiddleware is added to the FastAPI application before any custom middleware that relies on session data.

Error Example Code:

Here's a simple FastAPI application that demonstrates the error setup for session middleware:

from fastapi import FastAPI, Request
from starlette.middleware.sessions import SessionMiddleware

app = FastAPI()

# Add SessionMiddleware first
app.add_middleware(SessionMiddleware, secret_key="some-random-string")


# Add custom TestSessionMiddleware after SessionMiddleware
@app.middleware("http")
async def testing_session(request: Request, call_next):
if 'session' in request.scope:
session = request.session
test_value = session.get("test", None)
if test_value:
print(f"Middleware session value: {test_value}")
else:
print("No session value found.")
else:
print("Session middleware is not applied correctly.")

response = await call_next(request)
return response


@app.get("/test-session")
async def test_session(request: Request):
# Set a value in the session
request.session['test'] = 'value'
return {"session": dict(request.session)}

Success Example Code:

Here's a simple FastAPI application that demonstrates the correct setup for session middleware:

In order to fix this please move: app.add_middleware(SessionMiddleware, secret_key="some-random-string") on the last line. This will fix your problem.

from fastapi import FastAPI, Request
from starlette.middleware.sessions import SessionMiddleware

app = FastAPI()


# Add custom TestSessionMiddleware after SessionMiddleware
@app.middleware("http")
async def testing_session(request: Request, call_next):
if 'session' in request.scope:
session = request.session
test_value = session.get("test", None)
if test_value:
print(f"Middleware session value: {test_value}")
else:
print("No session value found.")
else:
print("Session middleware is not applied correctly.")

response = await call_next(request)
return response


# Add SessionMiddleware first
app.add_middleware(SessionMiddleware, secret_key="some-random-string")


@app.get("/test-session")
async def test_session(request: Request):
# Set a value in the session
request.session['test'] = 'value'
return {"session": dict(request.session)}

Key Points

  1. Order Matters: Ensure that SessionMiddleware is added after your custom middleware. This allows the session to be properly initialized and accessible.

  2. Check Middleware Setup: In your custom middleware, check if request.session is available. If not, it might indicate that SessionMiddleware is not correctly applied.

  3. Testing: Use endpoints like /test-session to set and retrieve session values, confirming that session management is working as expected.


Discover more amazing content below