Hooks¶
Lifecycle callbacks for app policy (welcome email, trial grant, audit log). A hook fires uniformly across every path that creates or authenticates a user.
crudauth.hooks.AuthHooks
dataclass
¶
AuthHooks(
on_after_register: Hook | None = None,
on_after_login: Hook | None = None,
on_after_logout: Hook | None = None,
on_after_email_verified: Hook | None = None,
on_after_password_reset: Hook | None = None,
on_after_email_changed: Hook | None = None,
on_after_sudo: Hook | None = None,
)
Container of optional lifecycle callbacks.
Every hook may be sync or async. user is passed as a plain dict so
hooks don't depend on your ORM type. Example:
```python
async def after_register(user, *, db, context):
await grant_trial(user["id"], db=db)
AuthHooks(on_after_register=after_register)
```
crudauth.hooks.HookContext
dataclass
¶
HookContext(
ip_address: str | None = None,
user_agent: str | None = None,
transport: str | None = None,
request: "Request | None" = None,
extra: dict[str, Any] | None = None,
)
Ambient request/identity info passed to hooks as context=.