Keep users signed in
A client built without client_secret acts for a signed-in user. It keeps the session in
- Stable unknown
- Release candidate since 0.1.0-rc.3
- Development since 0.1.0-dev.21+c43ebba
A client built without client_secret acts for a signed-in user. It keeps the session in
storage and refreshes the access token a minute before it expires.
Persist the session
The default MemoryStorage forgets the session when the process exits. Pass any object with
get_item, set_item and remove_item (the OvokStorage protocol) to keep it:
import json
from pathlib import Path
from ovok_sdk import Ovok
class FileStorage:
def __init__(self, path: Path) -> None:
self._path = path
def _read(self) -> dict[str, str]:
return json.loads(self._path.read_text()) if self._path.exists() else {}
def get_item(self, key: str) -> str | None:
return self._read().get(key)
def set_item(self, key: str, value: str) -> None:
self._path.write_text(json.dumps({**self._read(), key: value}))
def remove_item(self, key: str) -> None:
items = self._read()
items.pop(key, None)
self._path.write_text(json.dumps(items))
ovok = Ovok(
"https://api.sandbox.ovok.com",
"your-tenant",
storage=FileStorage(Path("ovok-session.json")),
)Each tenant has its own key, so one store can serve several clients. The stored session has the same shape as the TypeScript SDK's.
React when the session ends
The user is signed out only when the API refuses the refresh token; a network outage keeps
the session for a later retry. Pass on_unauthenticated to send the user back to sign-in:
def signed_out(reason):
print(f"Signed out ({reason.type}, HTTP {reason.status}); please sign in again.")
ovok = Ovok("https://api.sandbox.ovok.com", "your-tenant", on_unauthenticated=signed_out)ovok.auth.current() returns the session, or None when no one is signed in.
See Authentication for sign-in, MFA and registration.
Last updated on