Auth middleware
Two paths depending on your app type. Mechanics of #[middleware] are in Flow middleware.
ResumaApp (single-page / todo template)
Use set_action_middleware for #[server] actions only. See todo example.
set_action_middleware(|req| {
Box::pin(async move {
let req = attach_session(req)?;
Ok(req)
})
});
// attach_session sets:
req.set_extension("user_id", json!(user));
req.set_extension("roles", json!(roles));FlowApp (multi-page site)
Use #[middleware] — runs before pages, loaders, submits, and actions.
#[middleware]
async fn require_auth(mut req: FlowRequest) -> Result<FlowRequest> {
if req.header("authorization").is_none() {
return Err(ResumaError::Unauthorized);
}
req.set_extension("authenticated", json!(true));
Ok(req)
}What happens on Err?
- Pages — error view (401/403/429)
- Submits — JSON/HTML error response
- Actions —
{ ok: false, error: \"...\" }
Helpers on FlowRequest
req.is_authenticated()
req.user_id() // Option<&str>
req.has_role("admin")