Session
dagster_authkit.auth.session
Session Management Supports Stateless (Signed Cookies) and Stateful (Redis) backends.
SessionBackend
Bases: ABC
Abstract base class for session storage backends.
Implementations:
- RedisBackend: Stateful, multi-pod safe, stores sessions in Redis.
- CookieBackend: Stateless signed cookies with optional
DB-backed session versioning for cross-pod revocation.
create
abstractmethod
create(user_data)
Persist a new session.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
user_data
|
Dict[str, Any]
|
Dict with |
required |
Returns:
| Type | Description |
|---|---|
str
|
Opaque session token string to be set as a cookie. |
validate
abstractmethod
validate(token)
Validate a session token.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
token
|
str
|
Opaque session token (from cookie). |
required |
Returns:
| Type | Description |
|---|---|
Optional[Dict[str, Any]]
|
Original |
revoke
abstractmethod
revoke(token)
Revoke a single session token.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
token
|
str
|
Session token to invalidate. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
|
revoke_all
abstractmethod
revoke_all(username)
Revoke ALL active sessions for a user.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
username
|
str
|
User whose sessions should be terminated. |
required |
Returns:
| Type | Description |
|---|---|
int
|
Number of sessions revoked. |
RedisBackend
Bases: SessionBackend
Redis-based session storage (stateful, multi-pod safe).
Uses SETEX for token storage and Redis SET for per-user
token indexing, enabling efficient revoke_all.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
redis_url
|
str
|
Redis connection URL ( |
required |
max_age
|
int
|
Session TTL in seconds. |
required |
__init__
__init__(redis_url, max_age)
Initialise Redis connection.
CookieBackend
Bases: SessionBackend
Stateless signed-cookie sessions with optional DB-backed versioning.
Version resolution is lazy: the first create() or validate()
call attempts to resolve a version getter from the SQL backend. If
successful, revoke_all becomes multi-pod safe via the database.
Individual revoke() is always process-local (best-effort without Redis).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
secret_key
|
str
|
HMAC signing secret for cookie serialization. |
required |
max_age
|
int
|
Session TTL in seconds. |
required |
revoke
revoke(token)
Revoke a single token (process-local only).
Without Redis, individual logout only affects the current pod. The token remains valid on other pods until it expires naturally. For cross-pod individual logout, use RedisBackend.
revoke_all
revoke_all(username)
Invalidate all sessions for a user.
When DB-backed: raises NotImplementedError. The caller must use PeeweeAuthBackend._bump_session_version() which bumps the DB column directly. Session propagation delay is up to VERSION_CACHE_TTL (10s).
When in-memory (single-pod): bumps the local counter immediately.
SessionManager
Facade that auto-selects the session backend based on configuration.
- If
DAGSTER_AUTH_REDIS_URLis set: usesRedisBackend. - Otherwise: uses
CookieBackend(stateless signed cookies with optional DB-backed session versioning for SQL backends).
Usage::
token = sessions.create(user.to_dict())
user_data = sessions.validate(token)
sessions.revoke(token)
__init__
__init__()
Initialise and auto-select the session backend.