Middleware¶
future.interfaces.IMiddleware runs around controller actions. Same request / response injection as controllers.
from typing import Optional
from future.interfaces.IMiddleware import IMiddleware
from future.response import Response
from future.exceptions import HTTPException
class AuthMiddleware(IMiddleware):
async def before(self) -> Optional[Response]:
if not self.request.headers.get("authorization"):
raise HTTPException("unauthorized", 401)
return None
async def after(self) -> Optional[Response]:
return None
Attach on a group or route: middlewares=[AuthMiddleware].
beforeruns outer → inner → controllerafterruns in reverse- Return a
Responsefrombeforeto short-circuit (skip the controller)
Built-ins¶
Import from the class file: CORS, GZip, CSRF, RateLimit, Session, ScopeValidation. Confuser classes exist but are unfinished — see Gaps.
ScopeValidationMiddleware reads request.route.scopes and request.context["user_id"] / request.context["scopes"] (set by your auth middleware). Missing user_id → 401; missing required scope → 403. Routes with no scopes= are skipped.
Sessions¶
from future.middleware.SessionMiddleware import SessionMiddleware
from future.routing import RouteGroup, Get, Post
RouteGroup(
name="Auth",
middlewares=[SessionMiddleware],
routes=[
Post("/login", AuthController.login, "login"),
Get("/me", AuthController.me, "me"),
],
)
Then self.request.session["user"] = "alice".