cookieを判定するmiddlewareを作成し、privateなページのみミドルウェアをつけて、publicなページにはつけない。
該当のsession_tokenがない場合は、Redirectでpublicのページにリダイレクトさせる。
async fn main() { let public_router = Router::new() .route("/setcookie", get(handle_setcookie)) .route("/public", get(handle_public)); let private_router = Router::new() .route("/test", get(handle_index)) .route("/private", get(handle_private)) .layer(middleware::from_fn(my_middleware)); let app = Router::new() .nest("/", public_router) .nest("/", private_router); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap(); } // if session_token == None { Redirect::permanent("/public").into_response() } else { let mut res = next.run(req).await; res }
おおおおおおお、昨日長時間悶絶してただけあって、ここは割と簡単に上手くいった。