Skip to content

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=.