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.Microdotpéldány, amelyre telepíteni kell. Opcionális; hívja meg azinitialize()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ülValueErrorkivé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 apath='/'éshttp_only=Trueértékeket. Adja hozzá asecure=Truebeá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
sessionsütiből az első hozzáféréskor, és arequest.g._sessionhelyen 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ülValueErrorkivé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 apath='/'éshttp_only=Trueértékeket azinitialize()lefutása után.
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
A
Session.get()által visszaadott dict-szerű objektum. Adictalosztá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
sessionsü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.