microdot.session — aláírt süti-munkamenetek

Egy felhasználónkénti kulcs/érték tároló, amelyet egy jwt támogat egyetlen session sütiben. A JWT egy csak az alkalmazás által ismert titokkal van aláírva, így a kliens el tudja olvasni a sütit, de nem tudja módosítani a payloadot anélkül, hogy a szerver ne észlelné.

class Session

class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)
app

A microdot.Microdot példány, amelyre telepíteni kell. Opcionális; hívja meg az initialize() metódust később, ha nincs megadva.

secret_key

A munkamenet JWT aláírásához használt szimmetrikus kulcs. Bármely munkamenet olvasása vagy írása előtt szükséges – a get() elérése ilyen nélkül ValueError kivételt vált ki. A forráskódon kívül tárolja; egy kamerán ez jellemzően egy fájl a FAT fájlrendszeren.

cookie_options

Opciók dict-je, amelyek a microdot.Response.set_cookie() metódusnak kerülnek továbbításra a munkamenet-süti írásakor. Az alapértelmezés beállítja a path='/' és http_only=True értékeket. Adja hozzá a secure=True beállítást a csak HTTPS-es telepítésekhez.

initialize(app: Microdot, secret_key=None, cookie_options=None)

Csatolja az app alkalmazáshoz, ha a konstrukciót elhalasztották. A secret_key / cookie_options felülírja a konstruktor értékeit, ha meg vannak adva.

get(request) SessionDict

Adja vissza a munkamenet-szótárat a request számára. A szótár lustán dekódolódik a session sütiből az első hozzáféréskor, és a request.g._session helyen gyorsítótárazódik a kérés hátralévő részére. A módosított / nem aláírható sütik üres dict-et adnak vissza.

encode(payload: dict, secret_key=None) str

Kódolja a payload értéket JWT-ként a munkamenet titkával. Belsőleg használatos; azoknak a hívóknak van kitéve, akik kompatibilis tokeneket szeretnének előállítani.

decode(session: str, secret_key=None) dict

Ellenőrizzen és dekódoljon egy JWT-karakterlánc munkamenet-értéket. Bármilyen ellenőrzési hiba esetén {} értéket ad vissza.

secret_key: bytes | str | None

A munkamenet JWT aláírásához és ellenőrzéséhez használt aláíró titok. Konstrukció után beállítható. None, amíg be nincs állítva; a munkamenet olvasása enélkül ValueError kivételt vált ki.

cookie_options: dict

Az opciók dict-je, amelyeket a munkamenet-sütire alkalmaznak annak írásakor, és a microdot.Response.set_cookie() metódusnak kerülnek továbbításra. Az alapértelmezés beállítja a path='/' és http_only=True értékeket az initialize() lefutása után.

class SessionDict

class microdot.session.SessionDict(request, session_dict)

A Session.get() által visszaadott dict-szerű objektum. A dict alosztálya, így minden standard módosítás működik; két extra metódus visszaírja a változtatásokat a válaszba.

save()

Írja vissza a (esetleg módosított) munkamenetet a válaszba egy új session sütiként. E hívás nélkül a helyben végzett szerkesztések elvesznek, amikor a kérés véget ér.

delete()

Távolítsa el a munkamenetet egy süti-törlő fejléc kibocsátásával a válaszon.

Modulszintű dekorátorok

microdot.session.with_session(f)

Dekorátor, amely a munkamenet-szótárat második argumentumként adja át a route-kezelőnek:

from microdot import Microdot
from microdot.session import Session, with_session

app = Microdot()
Session(app, secret_key=load_secret())

@app.get('/counter')
@with_session
async def counter(request, session):
    session['n'] = session.get('n', 0) + 1
    session.save()
    return {'n': session['n']}

A dekorátor nem ment automatikusan – hívja meg a SessionDict.save() metódust, amikor a munkamenet módosult.

Maga a munkamenet payload egy közönséges Python dict, amely JSON-ként van szerializálva a JWT-n belül. Tartsa kicsinek: minden kérés és minden válasz a teljes sütit hordozza, és a JWT-ket nem nagy objektumok tárolására tervezték. A néhány száz bájtnál nagyobb felhasználónkénti állapothoz tárolja az adatokat szerveroldalon, egy kis munkamenet-azonosítóhoz kulcsolva.