let decision = match &view.state().session {
SessionState::Loading => RouteDecision::Pending,
SessionState::Authenticated(_) => RouteDecision::Allow,
SessionState::SignedOut => RouteRedirect::replace("/sign-in")
.return_to(&view.env().current_route)
.into(),
SessionState::Failed(_) => RouteDecision::Deny,
};
Router::<AppState>::new()
.with_path(view.state().current_path.clone())
.route_component(
"/account",
ProtectedRoute::new(decision, AccountRoute)
.pending(SessionLoadingRoute)
.denied(SessionUnavailableRoute),
)
.route_component("/sign-in", SignInRoute)
Decision | Built branch | Shell behavior |
|---|---|---|
Pending | pending | Waits for application state to change. |
Allow | allowed | Builds the protected component. |
Deny | denied | Shows denial; SSR responds with 403. |
Redirect | pending | Declares navigation after the build; SSR responds with 302. |