Skip to main content

admin_guard

Function admin_guard 

Source
pub(crate) async fn admin_guard(req: Request, next: Next) -> Response
Expand description

Axum 中间件:/admin* 的 SSR 层认证守卫。

未登录访问后台时,服务端直接 302 跳转 /login,根本不进入 Dioxus SSR 渲染器。此前后台鉴权完全在客户端 WASM 完成(SSR 渲染骨架屏 → WASM 下载/编译 → hydrate → 异步 get_current_user() → 客户端 navigator.push), 整条链串行,未登录用户首屏要“空白好久“才跳登录。

  • 只匹配 /admin*,其它路径(/login、公开页、/api/*)直接放行。
  • 复用 get_user_by_token:命中内存缓存 + 校验 session_generation (封禁/降级后旧 session 立即失效),与客户端鉴权同一套语义。
  • DB 错误时 fail-open(放行进入 SSR):避免数据库抖动把已登录的 管理员也踢到登录页;客户端 AdminLayout 仍有兜底校验。
  • /admin/login 本就不进 cache_control_for_path 缓存,302 不会被缓存。